Javascript 我可以在Iframe的父窗口中捕获Iframe的异常吗
我在页面中有一个IFrame,IFrame有一些JavaScript。在运行时,IFrame中的JavaScript给出了我希望在父窗口中捕获的异常。怎么做Javascript 我可以在Iframe的父窗口中捕获Iframe的异常吗,javascript,iframe,exception-handling,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(
<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>
var frm123=document.getElementById(“frm123”);
frm123.contentWindow.OneError=函数(){
警报(“捕获错误”);
}
函数loadData(){
var-oRTE=document.getElementById(“frm123”).contentWindow.document;
oRTE.open();
oRTE.write(txt123.value);
oRTE.close();
}
唯一的方法是如果帧位于同一个域上,在这种情况下,您可以从父级执行以下操作:
iframe.contentWindow.onerror = function(){
// handle error
}
.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()
处理程序请从下面的示例中检查它是否符合您的条件
有许多其他选项或调整可以处理此类错误:
if(frameDoc.title==“预期发生后的页面标题”)
还将使用iFrame的
.onLoad()
事件执行此工作。答案取决于您是否控制iFrame代码,以及它是否为同一域
如果是同一个域,则可以执行以下操作来设置包装文档中的错误处理功能:
document.getElementById("myiframe").contentWindow.onerror=function() {
alert('error!!');
return false;
}
确保在设置错误处理程序之前等待iframe完成加载
如果它不是同一个域,但您可以控制iframe内容(两个域都在您的控制之下),您可以使用跨域通信框架(google it或自己构建)与外部框架进行通信,即,通过在iframe中设置onerror处理程序来捕获iframe中的错误,并通过框架将其发送到外部文档
如果它不是同一个域,并且您无法控制iframe,则由于安全限制,外部文档无法知道它内部的情况。var frm123=document.getElementById(“frm123”);frm123.contentWindow.OneError=函数(){alert('error Capture');}函数loadData(){var oRTE=document.getElementById(“frm123”).contentWindow.document;oRTE.open();oRTE.write(txt123.value);oRTE.close();}@ArifHasan在您的问题中写下上述代码,以便其他人可以帮助您发布代码和异常消息,如果在页面加载过程中发生异常,我可以做什么?那么您将遇到问题,因为您无法从外部控制。