$(document).ready() запускается сразу для контекста window.open()
Я пытаюсь выполнить операции над DOM всплывающего окна, но по какой-то причине ready
событие запускается сразу для всплывающего окна, прежде чем что-то появится в DOM.
Я знаю, что jQuery может получить доступ к DOM всплывающего окна, используя контекст, и что я могу сделать это, используя setTimeout
отложить любое действие, пока не пройдет разумное количество времени.
(function ($) {
$(function () {
var popup = window.open('/test');
// JSFiddle 404 page
$(popup.document).ready(function () {
// Should fire when the DOM of the 404 page has loaded...
$('h2', popup.document).css('color', '#FF0000');
// Change the color of the header to red.
console.log($('h2', popup.document).length);
// Should log 1
// Logs 0, though, because this function fires immediately, before the DOM loads.
});
setTimeout($.proxy(function () {
// This will definitely fire after the DOM of the 404 page is loaded.
var popup = this;
$('h2', popup.document).css('text-decoration', 'underline');
// This works, because it waited long enough.
// But I don't want to guess how long it will take the DOM to load....
}, popup), 5000);
// After 5 seconds...
});
})(jQuery);
Кроме того, я знаю, что это не вина JQuery. Если я добавлю console.log(popup.document.readyState);
незамедлительно после var popup = window.open('/test');
печатает complete
, Но почему?
Любой совет?
Спасибо!
1 ответ
Вы пробовали это?
popup.onload = function () {
//lot of things
};
При загрузке jQuery, согласно документации, http://api.jquery.com/load-event/ это:
$(popup).load(function() {
// things
});
Этот вопрос также отвечает на что-то похожее: как я могу получить доступ к dom-дереву дочернего окна? Надеюсь, это поможет вам