Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

can I catch exception of Iframe in parent window of Iframe

I have an IFrame in a page and IFrame has some JavaScript. At run time JavaScript in IFrame gives exception which i want to catch on parent window. How to do that?

<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>
like image 867
Arif Hasan Avatar asked Jun 13 '11 06:06

Arif Hasan


People also ask

Can an iframe access its parent?

When a page is running inside of an iframe, the parent object is different than the window object. You can still access parent from within an iframe even though you can't access anything useful on it. This code will never cause an error even when crossing origins.

What is window parent postMessage?

The window. postMessage() method safely enables cross-origin communication between Window objects; e.g., between a page and a pop-up that it spawned, or between a page and an iframe embedded within it.


1 Answers

The answer depends on whether or not you have control of the iframe code, and whether or not it is the same domain.

If same domain then you can do the following to set the error handling function from the wrapping document:

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

make sure you wait for the iframe to finish loading before setting the error handler.

If it's not the same domain but you have control of the iframe content (both domains are under your control), you can communicate with the outer frame by using a cross domain communication framework (google it or build it yourself), i.e. catch the error in the iframe by setting the onerror handler from within the iframe and send it through the framework to the outer document.

If it's not the same domain and you don't have control of the iframe, there's no way for the outer document to know what's going on inside it because of security constraints.

like image 114
TheZuck Avatar answered Sep 27 '22 22:09

TheZuck