如何判断Javascript中是否存在窗口?

如何判断Javascript中是否存在窗口?,javascript,Javascript,我已经看到了一些方法来查看某个特定脚本打开的窗口是否仍然打开,但是如果它没有打开呢 我有一个小窗口,有一个按钮点击加载大窗口。当我关闭大的时,我想要一个特定的onUnload或onbeforeuload在小的关闭时开火;如果它仍然打开,这些程序将不会启动。我可能只是有一个巨大的大脑放屁,但我不知道如何检查另一个窗口是否打开。大的没有打开它,所以我不能简单地记录打开它的句柄 简而言之:如果窗口A打开了窗口B,我如何在窗口B内检查窗口A是否仍然存在?窗口。如果您弹出一个窗口并关闭它(由脚本或用户关闭

我已经看到了一些方法来查看某个特定脚本打开的窗口是否仍然打开,但是如果它没有打开呢

我有一个小窗口,有一个按钮点击加载大窗口。当我关闭大的时,我想要一个特定的
onUnload
onbeforeuload
在小的关闭时开火;如果它仍然打开,这些程序将不会启动。我可能只是有一个巨大的大脑放屁,但我不知道如何检查另一个窗口是否打开。大的没有打开它,所以我不能简单地记录打开它的句柄


简而言之:如果窗口A打开了窗口B,我如何在窗口B内检查窗口A是否仍然存在?

窗口。如果您弹出一个窗口并关闭它(由脚本或用户关闭),则关闭的
将设置为true

if(window.opener && !window.opener.closed)
    alert('Yup, still there.');
您的案例如下:

在弹出窗口中,您可以使用
window.opener.closed

按名称获取窗口句柄

我提到,在注释中不能只按名称获取窗口句柄。然而,我做了一些研究,发现以下在FF/IE/Chrome中有效:;这是一个黑客,我没有看到任何地方提到它作为预期的行为,所以我不会太依赖它,但发现它工作很有趣!在我的代码中,我仍然会确保传递所需的句柄

//opened a window without storing a handle, but gave it a name
window.open('/some/url', 'xxx');

// now I need to get a reference to that window
// Calling open without setting a url gets you
// a reference and doesn't reload the window
var win = window.open('', 'xxx')
使用try{}和catch(err){}


请尝试以下代码:

if (!!window) {
  console.log('Exist');
}

哦这很简单。下面是一个问题,不过。。。如果B是独立于A打开的,它有没有办法查看A是否存在?A有一个特定的名称/目标和一切,它不像是在试图预测我所说的A是什么意思,它知道我所说的A.window.parent是什么意思吗?那是给相框的,不是给波普的哦,天哪。谢谢你,胡安。是的,我指的是
opener
,不是
parent
。安德鲁:相关的键应该是
window.open
的windowName参数,但除了通过另一个调用
window.open
之外,我不知道还有什么方法可以使用它,这非常具有破坏性。只需检查window.opener并不会告诉你它仍然打开,如果您实际访问属性
window.opener.name
且窗口关闭,则会出现错误。你可以从句柄访问关闭窗口的唯一属性是“closed”属性Juan,你让我感到羞耻。好人。答案进一步编辑,以纳入您的宝贵更正。如果我能不止一次投票支持你的答案,我会的。谢谢。如果它可以通过原始javascript以外的方式打开呢?(即,如果C打开了B,B能看到A是否打开吗?)不,你不能“预言”窗口的把手。没有按名称列出的windows全局注册表。在您的示例中,C是否创建了一个?如果有,您应该存储该句柄
A=window.open();B=window.open();B.A=A'
。然后B可以检查
是否(!A.closed)
;谢谢你的帮助。事实上,我可能会考虑使用它,但现在我正试图使它更干净,并制定一个完整的后端解决方案。“也许没有窗口。开瓶器”不是一个精确的解决方案。这个问题已经有两年历史了,已经有了公认的答案。今后,请将您的精力放在新问题上或那些没有公认答案的问题上;)@Mifeet这个答案让我不满意。我只是想添加一个替代方案,如果有像我这样的人来这里,也许是一个更好的解决方案。“可能”一点也不好笑。因为不仅当window.opener不存在时,而且当处理window.opener的代码无效时,可能会触发catch。好的,谢谢您的澄清。不过,不建议使用try-catch,异常应该用于异常状态,而不是正常的执行流。测试是否设置了
window.opener
,是一个更好的解决方案。
try{
window.opener.document.body.getElementById('#elementId'); // do some action with window. opener
}
catch(err){
// if we are here then probably there is no window.opener
window.close(); // closing this window or whatever you want
}
if (!!window) {
  console.log('Exist');
}