【问题标题】:Safari doesn't call iframe onload when src is not valid site当 src 不是有效站点时,Safari 不调用 iframe onload
【发布时间】:2014-06-14 19:57:01
【问题描述】:

对于下面的 iframe,Safari 从不调用 onload 函数,也不在 iframe 中显示任何内容。我测试过的所有其他浏览器都会调用 onload 并显示默认错误网页。

<html>
<body>
<iframe src="http://www.asdkjhjhkjhkjhjhjhfhkjhsdflkjahdsjfhasf.com"
        onload="alert('iframe loaded');">
</iframe>
</body>
</html>

为什么会这样?如果没有解决这个问题,那么我需要找到一种方法来检测 iframe 是否加载失败。

【问题讨论】:

  • @alex 你说的错误是什么意思?我知道 onerror 属性,但它不适用于我所知道的任何当前浏览器上的 iframe

标签: javascript html iframe safari


【解决方案1】:

前几天我偶然发现了this post,它为Safari 中缺少的load event 提供了一种解决方法。该帖子来自 2011 年,但似乎仍然有效。

那里为 Safari 提出的解决方案是检查 iframedocument 上的 readyState 事件,如下所示:

<iframe id="ifra" src="http://www.asdkjhjhkjhkjhjhjhfhkjhsdflkjahdsjfhasf.com"
        onload="alert('iframe loaded');">
</iframe>
<script>
    var iframe = document.getElementById('ifra'),
        doc = iframe.contentDocument || iframe.contentWindow;
    if (doc.document) doc = doc.document;
    var _timer = setInterval(function() {
        if (doc.readyState == 'complete') {
            clearInterval(_timer);
            alert('iframe ready');
        }
    }, 1000);
</script>

根据Mozilla's documentation on contentDocument,仅在 Safari 中运行此脚本时,您不需要包含contentWindow 的解决方法,但我将其保留在此处,以防您想跨浏览器使用它。

【讨论】:

  • Safari 11.0.3 @ iOS - [安全错误(DOM 异常 18):阻止具有来源的框架 ... 访问具有来源的框架 .... 协议、域和端口必须匹配:(
  • 感谢您的评论,@sKopheK!这在 2018 年很有意义。浏览器已经禁止从不同域访问 iframe 文档已经有一段时间了。我什至很惊讶这在过去有效:-)
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多