Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 窗户能关上吗?_Javascript_Google Chrome_Firefox - Fatal编程技术网

Javascript 窗户能关上吗?

Javascript 窗户能关上吗?,javascript,google-chrome,firefox,Javascript,Google Chrome,Firefox,我需要知道window.close()是否真的要关闭窗口。这不是的副本,因为该解决方案依赖于检查window.name,这并不是绝对可靠的;弹出窗口可以用不同的名称打开,但仍然可以通过window.close()关闭 我不能只检查window.opener是否定义为null,因为在Firefox和Chrome中,如果用户关闭了opener,window.opener将设置为null。例如: // In parent window: window.open(); // In child wind

我需要知道
window.close()
是否真的要关闭窗口。这不是的副本,因为该解决方案依赖于检查
window.name
,这并不是绝对可靠的;弹出窗口可以用不同的名称打开,但仍然可以通过
window.close()
关闭

我不能只检查
window.opener
是否定义为null,因为在Firefox和Chrome中,如果用户关闭了opener,
window.opener
将设置为
null
。例如:

// In parent window:
window.open();

// In child window:
console.log(window.opener); // outputs a Window object

// Now, click the X on the parent window.

// Continue below in child window:
console.log(window.opener); // outputs null
// However, you can still close the window!
window.close(); // closes the child window
另一方面,如果用户在新选项卡中加载了带有此代码的页面:

console.log(window.opener); // also outputs null
window.close(); // doesn't work; window remains open
Firefox随后在错误控制台中抱怨脚本无法关闭非脚本打开的窗口,而Chrome什么也不做

我需要检查
window.close()
是否会关闭窗口的原因是,如果窗口仍然打开,我想转到另一个地址。我想这样做:

// Try to close window.
window.close();
// If the window is still open after three seconds, go to another page.
setTimeout(function(){
    // For testing purposes:
    alert("Not closed!");
    // What I want to do:
    window.location = "http://www.example.com/";
}, 3000);
然而,三秒钟的延迟会让我的应用程序对用户来说显得很慢。那不行。在我的电脑上,1毫秒的延迟足以让窗口关闭;只有当窗口保持打开时,才会发出警报。然而,我需要有人确认这对所有计算机都是正确的。这也不起作用:

try{
    // This will not throw an error regardless of
    // whether the window was actually closed:
    window.close();
}catch(e){
    // This never happens:
    console.log("Could not close window");
}

简而言之,我只需要在调用
window.close()
之前或之后,用JavaScript知道窗口是否会真正关闭。如何操作?

只需调用
window.close()
,然后检查
window.closed
是否关闭。这也将捕捉到这样的情况:您尝试
close()
一个带有beforeunload处理程序的页面,而用户选择不让它关闭


哦,根据规范
window.close()
在返回窗口之前同步更新
window.close
,这样您就不必担心超时等问题了。

为什么不调用
window.close()
并更改位置呢?要么它会关闭,要么它会加载新的URL。你可以很容易地确定它是否关闭了,但可能更难判断它是否会关闭…@Pointy实际上这是个好主意。