2011-02-10 40 views
9

是否有簡單的表達式來訪問使用jquery的iframe body。 假設iframe的id是框架。jQuery的iframe身體選擇器

我想給事件處理程序iframe。 例如,

$("#theframe").contents().find("body").click(function() { 
    alert("hello, you touched me~"); 
}); 

但是,此代碼在IE中不起作用。

任何其他想法 幫幫我〜

+1

您的網域的iframe裏面的文件? –

+0

是的,在其他目錄中的域名相同 –

+0

IE給你的錯誤是什麼? – meo

回答

18

給一個名稱屬性的iframe元素。現在你可以像這樣引用它:

window.name_of_iframe 

你的iframe可能沒有那麼jQuery的使用標準穿越是一種更安全的方式

iframe_body = window.name_of_iframe.document.getElementsByTagName("body")[0]; 

這將是在iframe body元素。這是的jQuery主機頁面上可用但是,這樣:

$(window.name_of_iframe.document.getElementsByTagName("body")[0]); 

是你的jQuery包裝的iframe的主體元素。

注意做到這一點只有在iframe中加載:

$("iframe[name=name_of_iframe]").load(function() { 
    var iframe_body = window.name_of_iframe.document.getElementsByTagName("body")[0]; 
    $(iframe_body).click(function() { 
     alert("hello, you touched me~"); 
    }); 
}); 

UPDATE:測試它在IE瀏覽器,並有一個與它相當starnge行爲。在Firefox中,您必須將其包裝在文檔就緒事件中,但在IE中,它必須位於iframe元素之後的外部。此版本也適用於IE和Firefox。

<iframe name="ifr" src="?if=1"></iframe> 
<script type="text/javascript"> 
var ifr_loaded = false; 
$("iframe").load(function() { 
    $(window.ifr.document.getElementsByTagName("body")[0]).click(function() { alert("s"); }); 
    ifr_loaded = true; 
}); 
$(function() { 
    if (!ifr_loaded) 
    { 
     $("iframe").load(function() { 
      $(window.ifr.document.getElementsByTagName("body")[0]).click(function() { alert("d"); }); 
     }); 
    } 
}); 
</script> 

更新2:較短的版本,但它有它的缺點,那你必須指定在JavaScript iframe的來源,但它在我嘗試了所有瀏覽器上運行。

<iframe name="ifr"></iframe> 
<script type="text/javascript"> 
$(function() { 
    $("iframe").load(function() { 
     $(window.ifr.document.getElementsByTagName("body")[0]).click(function() { alert("d"); }); 
    }).attr("src","/teszt/v/index.php?if=1"); 
}); 
</script> 

更新3:而對於年底的更簡單的方法:

<script type="text/javascript"> 
function init_iframe(obj) { 
    $(obj.document.getElementsByTagName("body")[0]).click(function() { alert("d"); }); 
} 
</script> 
<iframe name="ifr" src="?if=1" onload="init_iframe(window.ifr);"></iframe> 
+1

只是爲了幫助任何與我有同樣問題的人,這個腳本的核心部分用於設置iFrame文檔上的樣式工作正常,但對於綁定到iFrame的加載函數,我發現設置onload HTML中的屬性效果更好。 – gb2d

+2

這些方法都不行(在chrome 40中測試)。 –

+2

@Morteza是你的iframe相同的起源,從主頁面加載相同的域?如果不是,則相同的來源策略將阻止您訪問框架的內容 – aorcsik