Say you have a global function alert2:
function alert2(msg) {
window.alert(msg);
}
And you also have a reference to a second window obj
Note: This only works if both windows belong to the same domain (Single Domain Policy).
What you can do is create function in the childWindow
:
var func = function() {
var parent = window; // pointer to parent window
var child = childWindow;
return function() {
... anything you like to do ...
parent.alert('Attached to main window')
child.alert('Attached to child window')
}
}();
childWindow.func = func; // pass function to child window
The nested functions make sure that you can access the references from the context where the function was created (note the }();
at the end which terminates the first function and calls it immediately).
The last line creates the new function in the child window; all JavaScript code in the child window can access it as window.func
, too.
It's a bit confusing but just think of it like this: You have two window instances/objects. Just like with any JavaScript object, you can assign new properties to them.
You can use childWindow.opener
to get the window
object that opened the child window.
alert2.call(childWindow.opener, "called from child using parent as context");
Demo: http://jsfiddle.net/hJ7uw/8/