我可以在Iframe的父窗口中捕获iframe的异常

Ari*_*san 13 javascript iframe exception-handling

我在页面中有一个IFrame,IFrame有一些JavaScript.在运行时IFrame中的JavaScript提供了我想要在父窗口上捕获的异常.怎么做?

<html> 
<head> 
<script type="text/javascript"> 
var frm123 = document.getElementById("frm123"); 
frm123.contentWindow.onerror = function() { 
    alert('error caught'); 
} 
function loadData() { 
    var oRTE = document.getElementById("frm123").contentWindow.document;
    oRTE.open(); 
    oRTE.write(txt123.value);
    oRTE.close();
} 
</script> 
</head> 
<body> 
<input type="button" onclick="loadData();" value="load"> 
<input type="text" id="txt123"> 
<iframe id = "frm123" > 
</body> 
</html>
Run Code Online (Sandbox Code Playgroud)

The*_*uck 21

答案取决于您是否可以控制iframe代码,以及它是否是同一个域.

如果是同一个域,则可以执行以下操作从包装文档中设置错误处理功能:

document.getElementById("myiframe").contentWindow.onerror=function() {
    alert('error!!');
    return false;
}
Run Code Online (Sandbox Code Playgroud)

确保在设置错误处理程序之前等待iframe完成加载.

如果它不是同一个域,但您可以控制iframe内容(这两个域都在您的控制之下),您可以使用跨域通信框架(谷歌或自己构建)与外框通信,即捕获错误在iframe中,通过在iframe中设置onerror处理程序并将其通过框架发送到外部文档.

如果它不是同一个域而你没有iframe的控制权,那么由于安全限制,外部文档无法知道它内部发生了什么.


小智 2

唯一方法是如果框架位于同一域上,在这种情况下您可以从父级执行以下操作:

iframe.contentWindow.onerror = function(){
    // handle error
}
Run Code Online (Sandbox Code Playgroud)