为 iframe 元素指定一个 name 属性。现在你可以像这样引用它:
window.name_of_iframe
你的 iframe 可能没有 jQuery,所以使用标准遍历是一种更安全的方式
iframe_body = window.name_of_iframe.document.getElementsByTagName("body")[0];
这将是 iframe 中的正文元素。然而,这可以由 jQuery 在主机页面上使用,所以:
$(window.name_of_iframe.document.getElementsByTagName("body")[0]);
是 iframe 的 body 元素的 jQuery 包装器。
只有在加载 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~");
});
});
更新: 在 IE 中对其进行了测试,并且有一个相当严重的行为。在 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>