对于以下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提出的解决方案是在iframe
的document
上检查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
中包含变通方法,但我将其保留在此处,以防您想在浏览器之间使用它。