Safari没有'当src不是有效的站点时,不要调用iframe-onload

Safari doesn't call iframe onload when src is not valid site

本文关键字:站点 iframe-onload 调用 有效 没有 src Safari      更新时间:2023-09-26

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

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

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

前几天我偶然发现了这篇文章,其中提供了一个解决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关于contentDocument的文档,当仅在Safari中运行此脚本时,您不需要在contentWindow中包含变通方法,但我将其保留在此处,以防您想在浏览器之间使用它。