我正在开发一个基于Web的应用程序,我必须在其中打开弹出窗口。我使用gl_ObjectPlaneR[gl_MaxTextureCoords]
方法打开弹出窗口,如下所示:
gl_ObjectPlaneQ[gl_MaxTextureCoords]
其中url包含我希望弹出窗口导航到的URL。现在,问题是,如果我从多个标签(具有相同或不同的网址)执行window.open()
,至少在Chrome上,它可能/可能不会为您提供之前打开的相同窗口。这个行为是不一致的,我的意思是,它应该每次都给我一个新的窗口,或者它应该让我每次都打开窗口。
我需要为整个域保留相同的弹出窗口。
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
好像有一个方向可以去或者至少试一试。
它完全保留在localStorage
上,这使您能够在单个域中的选项卡之间共享知识。
我在下面提供的代码
它的作用:它通过localStorage
中的网址保存弹出窗口,当您尝试使用相同的网址打开新网址时,它不会这样做。如果您不想通过URL区分它们,则更简单:将boolean存储在localStorage而不是对象中。
它不会做但应该:
onunload
(关闭)事件并相应地重置localStorage
信息。这里最适合您将localStorage
boolean
值设置为false
onunload
(重新加载,关闭)事件,并根据您的逻辑重置某些内容。据我所知,最适合你的只是检查这个标签是否是你域中的最后一个(你也可以使用localStorage,例如在每个新标签上添加标识符,例如创建时间戳并在标签关闭时销毁它)和如果将localStorage
boolean
值设置为false
。我认为,这足以解决问题。最后是一小段代码:
// get the localstorage url map
function getOpenPopups() {
var obj = localStorage.getItem('mypopups');
return obj ? JSON.parse(obj) : {};
}
// set the localstorage url map
function setOpenPopups(object) {
localStorage.setItem('mypopups', JSON.stringify(object))
}
// open the popup
function popup(url, title) {
var popups = getOpenPopups();
// check whether popup with this url is already open
// if not then set it and open the popup
if (!popups[url]) {
popups[url] = true;
setOpenPopups(popups);
return window.open('abc', 'cde');
}
else {
return false;
}
}
答案 1 :(得分:0)
从w3c documentation我们可以看到window.open()
返回对新创建的窗口的引用,如果调用失败则返回null。这意味着我们可以将其保留在内存中并检查该窗口的closed
标志。
var newWindow = window.open('/some/path', 'TestWindow');
// ...
if (!newWindow.closed) {
}
请记住,如果存在具有以下名称的窗口,则页面将在同一窗口中加载而不打开新窗口。 您可以在官方文档中找到{_ 1}}参数的其他变体,如_blank,_self,_top,_parent。