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

can I catch exception of Iframe in parent window of Iframe

本文关键字:Iframe 异常 窗口      更新时间:2023-09-26

我在页面中有一个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内容(两个域都在你的控制之下),你可以通过使用跨域通信框架(谷歌或自己构建)与外部框架通信,即通过在iframe中设置oneror处理程序来捕获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的CCD_ 5事件进行工作。

only 方法是如果帧在同一个域上,在这种情况下,您可以从父级:

iframe.contentWindow.onerror = function(){
    // handle error
}