I am trying to open a popup like this:
$('#btn').click(function () {
var popup = window.open('mypage.php', '_blank', 'width=500,height=500');
var dom = popup.document.body;
for (i in dom) {
console.log(dom[i]);
}
});
Now what I want to do is to get the html from the popup window and also be able to use maybe a jQuery function from the window.opener (the page that opened the popup)
PS. In the console there are a lot of things printed but no html source.
Use this to try: http://jsfiddle.net/JRqTy/
Thanks in advance.
Try:
var html = popup.document.documentElement.outerHTML
EDIT
The window is not loaded immediately. Something like this will work, assuming that you're not attempting to violate the same-origin policy:
$('#btn').click(function() {
var popup = window.open('[Your URL HERE]', '_blank', 'width=500,height=500');
popup.onload = function() {
setTimeout(function(){ console.log(popup.document.documentElement.outerHTML) }, 2000);
}
});
Here's a working fiddle.
Note: If you control both the parent and the child source, you could also have the child invoke a method on the parent that passes in it's html:
Child Window
// Call when body is loaded
function SendHtmlToParent() {
window.opener.HtmlReceiver(document.outerHTML);
}
Parent
function HtmlReceiver(html) {
console.log(html);
}
Wait...
Note that remote URLs won't load immediately. When window.open() returns, the window always contains about:blank. The actual fetching of the URL is deferred and starts after the current script block finishes executing. The window creation and the loading of the referenced resource are done asynchronously.
MDN
And if you wait, you will get this error:
Unsafe JavaScript attempt to access frame with URL https://www.google.co.il/ from frame with URL http://fiddle.jshell.net/_display/. Domains, protocols and ports must match.
So it can be done with google, unless you're working there...
Fiddle
If you open something "valid" it will work fine.
Working DEMO