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

问题描述

| 我在页面中有一个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>
    

解决方法

        答案取决于您是否拥有对iframe代码的控制权,以及它是否属于同一域。 如果是同一域,则可以执行以下操作以从包装文档中设置错误处理功能:
document.getElementById(\"myiframe\").contentWindow.onerror=function() {
    alert(\'error!!\');
    return false;
}
请确保在设置错误处理程序之前等待iframe完成加载。 如果不是同一域,但您可以控制iframe内容(两个域都在您的控制之下),则可以使用跨域通信框架(使用Google自己构建或自行构建)与外部框架进行通信,即通过在iframe中设置onerror处理程序来捕获iframe中的错误,然后通过框架将其发送到外部文档。 如果它不是同一域,并且您没有对iframe的控制权,则由于安全性限制,外部文档将无法知道其中的内部情况。     ,        
.onError()
功能不起作用的可能原因很少,可能是由于跨域URL,为此,您应在实际使用
iFrame
之前进行检查,然后再使用
var url = \"google.com\"
var loading_url = \"/empty.html\"
document.getElementById(\"iframe\").src = loading_url;
$.ajax({
url: url,type: \'GET\',complete: function(e,xhr,settings){
     if(e.status === 200){
          document.getElementById(\"iframe\").src = url;
     }
  }
});
这将无法跨域工作,在这种情况下,状态码为0。 还要检查的是
.onError()
处理程序,请从下面的示例中检查是否符合您的条件 如何处理加载iframe中的错误? 还有许多其他选项或调整可以处理此类错误:
if (frameDoc.title == \'title of page after expection occur\')
也将使用iFrame的“ 7”事件进行工作。     ,        唯一的方法是,如果框架与父域在同一域中,则可以这样做:
iframe.contentWindow.onerror = function(){
    // handle error
}