Как получить элемент и html из js-функции window.open с помощью jquery - PullRequest
6 голосов
/ 21 марта 2012

Я пытаюсь открыть всплывающее окно следующим образом:

$('#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]);
    }
});

Теперь я хочу получить html из всплывающего окна и также иметь возможность использовать, возможно, функцию jQuery из окна..opener (страница, открывшая всплывающее окно)

PS.В консоли напечатано много вещей, но нет источника HTML.

Используйте это, чтобы попробовать: http://jsfiddle.net/JRqTy/

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 21 марта 2012

Попробуйте:

var html = popup.document.documentElement.outerHTML

EDIT

Окно не загружается сразу. Примерно так будет работать, если предположить, что вы не пытаетесь нарушить политику того же происхождения :

$('#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);
    }  
});​

Вот рабочая скрипка .

Примечание: Если вы управляете как родительским, так и дочерним источником, вы также можете попросить, чтобы дочерний элемент вызвал метод для родителя, который передает его в HTML:

Детское окно

// Call when body is loaded
function SendHtmlToParent() {
    window.opener.HtmlReceiver(document.outerHTML);
}

Родитель

function HtmlReceiver(html) {
    console.log(html);
}
1 голос
/ 21 марта 2012

Подождите ...

Обратите внимание, что удаленные URL-адреса не загружаются сразу.Когда window.open () возвращается, окно всегда содержит about: blank.Фактическая загрузка URL-адреса откладывается и начинается после завершения выполнения текущего блока скрипта.Создание окна и загрузка указанного ресурса выполняются асинхронно.

MDN

И если вы подождете, вы получите эту ошибку:

Небезопасная попытка JavaScript получить доступ к фрейму с URL https://www.google.co.il/ из фрейма с URL http://fiddle.jshell.net/_display/. Домены, протоколы и порты должны совпадать.

Так что это можетпокончим с гуглом, если вы там не работаете ...

Fiddle

Если вы откроете что-то "действительное", оно будет работать нормально.

Рабочая ДЕМО

...