I found this samplefrom SO while browsing for my problem, but I want to know exactly how to use it in my scenario. I have an iframe which is from another domain, and I want to detect when the iframe url is changed from one to another page in that other domain. So, what I was thinking is to have something like this when the 2nd page in the iframe is opened:
<script type="text/javascript">
$(document).ready(function() {
parent.postMessage("Second Page");
}
</script>
That's all I need, I just need to receive message that the iframe has different url. Now on the parent page, I'll might have something like this:
<script type="text/javascript">
$(document).ready(function() {
$('#frame').load(function () {
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to message from child window
eventer(messageEvent,function(e) {
var secondPageValue = // I want to get the value from the child page here, how can I do that?
},false);
});
});
</script>
I'm trying to use this postMessage option for first time, so every advice will be greatly appreciated. Also, do I need to include some JS libraries such as jquery on child side to make this work?
Thanks in advance, Laziale
You need to set targetOrigin when using postMessage.
Then on the host page.
Check http://davidwalsh.name/window-iframe out. This is a perfect working example.
The parent object provides a reference to the main window from the child. So if I have an iFrame and console the parent within it, the console will read:
Since we now have hold of the window, we can postMessage to it:
The directive above triggers the iFrame to send a message to the parent window every 3 seconds. No initial message from the main window needed!