如何检查JavaScript中的window.open函数,以避免打开相同的窗口

4

我想在我的javascript中使用以下方法在新窗口打开URL:

var win = window.open(url...);

如何检查这个问题,不要打开同一个窗口并且丢失所有输入的数据。 例如,如果我在新窗口中打开了“www.musite.com/addproduct” URL,输入数据,离开我的工作场所。然后我再次点击打开窗口,新窗口会打开,我就会失去所有数据。

2个回答

2
以下操作可使窗口只打开一次:
if (typeof win !== 'object') {
   win = window.open('http://www.google.com');
}
else {
   // Do nothing
}

正如Sani在另一个回答中建议的那样,为了能够重新打开窗口,最好记录窗口何时关闭。 您可以在弹出窗口中监听window.onunload事件,如下所示:

window.onunload = function() {
   window.opener.win = undefined;
}
onunload事件处理程序将把打开弹出窗口的窗口的全局变量win设置为undefined,因此您将能够重新打开该窗口。
请注意,由于同源策略,这仅适用于与父窗口相同域的弹出窗口。另外,请注意我只在Firefox中测试过上述内容。

窗口关闭时是否有任何事件?因为我检查了这个解决方案...并且:第一次打开窗口-OK。尝试打开第二个窗口副本-OK(消息)。关闭窗口。打开一个窗口-错误(窗口已经打开的消息)。 - Dmitriy
是的,您可以在弹出窗口中监听 window.onunload 事件:https://developer.mozilla.org/en/DOM/window.onunload - Daniel Vassallo

0

window.open 函数在成功时返回窗口的引用,失败时返回 null。
您应该检查 win 不是 null:

if (win != null) {
  // It is now safe to open the window.
}

当关闭窗口时,您还需要将win设置为null,以便您知道可以再次打开它。


谢谢,我如何检查窗口关闭事件? 还有... var win = window.open(url) - 此时窗口已经打开 - Dmitriy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接