【问题标题】:All window need to close while user session expire How?用户会话到期时需要关闭所有窗口如何?
【发布时间】:2017-01-06 17:00:26
【问题描述】:

我正在尝试使用会话存储关闭窗口,但它不起作用??

对我来说,我在不同的 && 不同的模块中打开新窗口,因此我无法为我的应用程序全局使用会话存储维护“Var”

<html>
<body>

<button onclick="openWin()">Open "myWindow"</button>
<button onclick="closeWin()">Close "myWindow"</button>

<script>
var my1;


function openWin() {
my1 = window.open("", "myWindow", "width=200,height=100");
alert(my1)
sessionStorage.setItem('aa',my1);

}

function closeWin() {
var retrievedObject = sessionStorage.getItem('aa');
retrievedObject.close();
}
</script>

</body>
</html>

【问题讨论】:

  • 会话存储保存字符串,没有办法存储对窗口的引用...
  • 但是当我把日志它的返回窗口对象如何@epascarello

标签: javascript jquery jsfiddle session-storage


【解决方案1】:

我在 plunker 中为您创建了一个工作版本here

但是您需要考虑以下几点:如果您的代码在选项卡内运行并且被关闭,那么您的代码将永远不会运行以关闭其他窗口并且用户必须将它们全部关闭。

顺便说一句:您的代码在stackoverflow 中无法运行,因为它是sandboxed。 (您无权访问其中的会话存储)

更新:

因为 my1 是对窗口实例的引用,所以当你把它放在 sessionStorage 中时,它会丢失引用。所以我唯一想到的就是在本地存储它。查看更新的 plunker。

【讨论】:

  • 你说得对。因为您正在存储窗口对象的实例,所以它以某种方式丢失了引用。看更新@epascarello
  • @Yaser 我知道,但在我的情况下,我需要关闭所有新窗口,所以我该怎么做,没有全局变量我什么都做不了
  • 您可以将它们添加为数组并循环遍历以关闭所有
  • 如何为我的整个应用程序保留一个全局数组,因为我将在不同 && 不同的应用程序中打开新标签
  • 如果是新标签,您将无权访问它们,因此您无法从一个标签关闭它们,您唯一能做的就是在每个标签中注入一个功能,并在到期时自行关闭他们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 2014-09-24
  • 2010-10-31
  • 1970-01-01
  • 2011-06-23
相关资源
最近更新 更多