问题描述
|
我在页面中有一个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
}