看起来好像有一个方向去或至少尝试一下。
它完全保留在localStorage
,它使您能够在单个域内的标签之间共享知识。
我给出的代码不起作用(这只是一个方向),所以不要期望太多的运行它,因为它是。
它做了什么:它通过url保存弹出窗口localStorage
,当您尝试使用相同的URL打开一个新窗口时,它不会这样做。如果您不想通过URL区分它们,则更简单:在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;
}
}
jsFiddle
你不能。只能从打开它的标签页访问弹出窗口。 – Cerbrus
你确定吗?我认为它可以从同一个来源访问。我猜想不一致取决于窗口的内容。如果内容与打开它的脚本的起源相同,并且与尝试访问它的NEXT脚本的起源相同,则它应该保留。否则,将打开一个新窗口。检查控制台的访问是否被拒绝 – mplungjan
如果弹出窗口对象引用不会出现在另一个选项卡上,它如何从同一来源访问? – smnbbrv