在window.open(“”)之后无法执行的javascript

时间:2019-06-27 16:01:42

标签: javascript html automated-tests

我正在尝试使网站上的某些内容自动化,但是在打开页面后,我的javascript无法执行。

代码很简单:

html:

<!DOCTYPE html>
<html>

<head>
</head>

<body>
    <script src="script.js"></script>
</body>

</html>

javascript:

var win = window.open("https://www.google.ca/", "_top");
console.log("test");

当您按f12键(在Chrome上)时,可以看到在控制台中未记录“测试”,但是如果删除了window.open函数,则会记录该记录。 window.open("")之后没有其他代码被执行,我想知道我该怎么做。我也在javascript代码中尝试过此方法,但没有成功:

var win = window.open("https://www.google.ca/", "_top");
win.onload = function(){
    console.log("test");
}

3 个答案:

答案 0 :(得分:3)

这是不可能的:通过将window.open的第二个参数设置为_top,您要求浏览器在当前用于运行脚本的同一窗口中打开另一个页面。当您离开当前脚本时,它的执行就会停止

答案 1 :(得分:1)

这在您的代码中是不可能的,因为通过使用_top,您离开了原始页面,因此代码执行立即停止。

尽管您可以使用延迟setTimeout来获得所需的结果。

console.log("Before Popup");

function openWindow(){
    setTimeout(function(){ window.open("https://www.google.ca/", "_top"); }, 100); //delay of 100ms
    console.log("Window Opened");
}
<button onclick="openWindow();">Click here to Window</button>

答案 2 :(得分:1)

基本上,当您执行window.open时浏览器会失去焦点,这就是为什么由于执行停止而未执行代码。将功能包装在setTimeout中,即使浏览器不在焦点上也可以运行。您的代码变为

var win = window.open("https://www.google.ca/", "_top");
setTimeout(() => console.log("test"));