【问题标题】:jquery iframe body selectorjquery iframe 正文选择器
【发布时间】:2011-02-10 09:02:37
【问题描述】:

是否有使用 jquery 访问 iframe 正文的简单表达式。 假设 iframe 的 id 是 theframe。

我想将事件处理程序提供给 iframe。 例如,

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

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

任何替代的想法 帮帮我~

【问题讨论】:

  • 文档是否在您域的 iframe 中?
  • 是的,其他目录中的同一个域
  • IE给你的错误是什么?
  • 帧[0].document.click(function(){...});这行得通,我不知道为什么?

标签: jquery iframe


【解决方案1】:

为 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>

【讨论】:

  • 只是为了帮助任何与我有同样问题的人,这个脚本的核心部分用于在 iFrame 文档上设置样式工作正常,但至于绑定到iFrame,我发现在 HTML 中设置 onload 属性效果更好。
  • 这些方法都不起作用(在 chrome 40 中测试)。
  • @Morteza 是您的 iframe 同源,从与主页相同的域加载?如果不是,那么同源策略将阻止您访问框架的内容
猜你喜欢
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2023-03-27
  • 1970-01-01
  • 2015-04-20
  • 2011-12-04
  • 2013-07-17
相关资源
最近更新 更多