2017-02-12 4 views
0

У меня есть код ниже. Он пытается открыть окно в строке 6. Но он продолжает загружать (показывает обработку в строке заголовка с пустым содержимым в окне). Когда я пошагово код в отладчике и двигаться по линии 10 завершающего выполнение линии 9, окно, наконец, загружает, давая мне ошибкуJavaScript window.open() не загружается автоматически

Uncaught TypeError: Cannot read property '0' of null on line 9.

Я не понимаю, почему window.open() не полная загрузка веб-страницы непосредственно на window.open() и почему это всегда полная загрузка, когда я прохожу через линию 9.

var pageURL='url'; 
var w=500; 
var h=500; 
var left = (screen.width/2)-(w/2); 
var top = (screen.height/2)-(h/2); 
var targetWin = window.open (pageURL, "_blank",'toolbar=no, location=no,directories=no, status=no, menubar=no, scrollbars=yes, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left); 
var windowStr = targetWin.document.documentElement.innerHTML; 
var divMatch = windowStr.match(/someregex/); 
console.log(divMatch[0]); 

после прочтения предложения онлайн положить следующий после строки 6, но такое же поведение !!!

targetWin.document.close(); 

Что здесь происходит? Я отлаживаю в Chrome.

+0

по достоинству оценят любые комментарии до проголосовали ... Я знаю, что это может быть не рабочий код ... но все же опыт людей может говорить ... и если нужен действительно фиктивный код ... тогда я должен его подготовить и посмотреть, дает ли он такое же поведение. Но тогда, пожалуйста, спросите, что фиктивный код абсолютно необходим перед голосованием. – anir

+0

@wOxxOm вы можете объяснить больше? Если это что-то о CORS, то он не должен загружаться вообще, даже после строки 9 вправо? – anir

ответ

3

I don't get why window.open() does not complete loading webpage immediately

Это потому, что window.open является асинхронный. Чтобы получить содержимое окна, вам нужно дождаться его загрузки.

От MDN:

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.

Вы можете ждать load события:

var targetWin = window.open (...); 
targetWin.addEventListener('load', function() { 
    // Continue doing stuff here. 
}); 

Попеременно, вы можете ждать DOMContentLoaded события.

Также обратите внимание, что это можно сделать только в том случае, если соблюдается same-origin policy.

Смежные вопросы