JavaScript window.open()不会立即加载窗口

时间:2017-02-12 19:31:46

标签: javascript google-chrome google-chrome-devtools

我有以下代码。它试图在第6行打开一个窗口。但它继续加载(在标题栏中显示处理窗口中的空白内容)。当我逐步调试调试器中的代码并在第10行完成第9行的执行时,窗口最终加载,给我错误

  

未捕获的TypeError:无法读取属性' 0'第9行的null。

我不明白为什么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进行调试。

1 个答案:

答案 0 :(得分:2)

  

我不明白为什么window.open()没有立即完成加载网页

这是因为window.open asyncronous 。要获取窗口的内容,您需要等待它被加载。

来自MDN

  

请注意,远程网址不会立即加载。当window.open()返回时,窗口始终包含about:blank。 URL的实际提取是延迟的,并在当前脚本块完成执行后启动。窗口创建和引用资源的加载是异步完成的。

您可以等待load事件:

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

或者,您可以等待DOMContentLoaded事件。

另请注意,只有在尊重same-origin policy的情况下才能执行此操作。