对于以下iframe,Safari从不调用onload函数,也不会在iframe中显示任何内容。我测试的所有其他浏览器都会调用onload并显示默认的错误网页。
<html>
<body>
<iframe src="http://www.asdkjhjhkjhkjhjhjhfhkjhsdflkjahdsjfhasf.com"
onload="alert('iframe loaded');">
</iframe>
</body>
</html>
为什么会这样?如果没有解决此问题的方法,那么我需要找到一种方法来检测iframe是否无法加载。
答案 0 :(得分:4)
前几天我偶然发现了this post,并在Safari中找到了遗失load event
的解决方法。该帖子是2011年,但似乎仍然有效。
针对Safari提出的解决方案是检查readyState
iframe
document
上的<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>
事件,如下所示:
contentWindow
根据Mozilla's documentation on contentDocument,只有在Safari中运行此脚本时,您才需要在{{1}}中包含变通方法,但我将其保留在此处,以防您想要使用它跨浏览器。