javascript - Javascript: 如何获取所有打开的Windows的列表

  显示原文与译文双语对照的内容
0 0

假设你打开了几个 Windows,其中包括:

 window.open(url1,'win1');
 window.open(url2,'win2');
 window.open(url3,'win3');

( 每个窗口都有唯一的名称)

然后你刷新页面。

3弹出 Windows 仍然打开。 是否有方法列出所有打开的Windows的名称并关闭它们?

这不是一个重复的问题。

在这个问题中,浏览器正在刷新,所以你不能简单地使用全局 array 来跟踪子 Windows 。

这不是一个重复的问题。

时间:原作者:7个回答

0 0

所以问题是关闭的,我将根据评论和研究发布一个答案。

首先,对所有评论者,感谢你帮助。

答:没有内置对象跟踪打开的Windows,并且从页面加载持续到页面加载。

就像 Felix Kling指出的,使用localStorage是一种可能的。

原作者:
0 0

尝试postMessage在相同域内的现有 Windows 之间进行通信。 这就是我尝试解决同样问题的方法。 请参阅:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

index.htm

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="utf-8">
 <title>pop</title>
 </head>
 <body>
 <script>
var pops = [];
window.onmessage = function(e)
{
//todo: check domain 
//if( e.origin )
 var data;
 try
 {
 data = JSON.parse(e.data);
 }
 catch(e)
 {
//fail silent...?
 return;
 }
 switch(data.event)
 {
 case"RestoreOpenWindow":
 onClosePopup(e.source.name);
 case"QueryOpenWindows":
 pops.push(e.source);
 updateLabel();
 break;
 }
};
window.onload = function()
{
 window.onClosePopup = onClosePopup;
 updateLabel();
};
window.onbeforeunload = function()
{
 for(var i = 0; i <pops.length; i++) pops[i].queryOpenPopups();
};
function onClosePopup(name)
{
 for(var i = pops.length - 1; i> = 0; i--)
 if(pops[i].name === name)
 { pops.splice(i, 1); break; }
 updateLabel();
};
function openPopup()
{
 pops.push(window.open("pop/popup.htm","pop" + pops.length, ' '));
 updateLabel();
 setTimeout(function(){
 alert('Click ok to refresh...');
 location.href = location.href;
 }, 5000);
}
function updateLabel()
{
 document.getElementById("total").innerHTML = pops.length;
 var html = [];
 for(var i = 0; i <pops.length; i++)
 html.push(pops[i].name);
 document.getElementById("names").innerHTML = html.join("<br"+"/"+">");
}
 </script>
 <button onclick="openPopup()">open popup and refresh after 5 seconds (...allow em popups...)</button></br>
 <span>total: </span><span id="total"></span></br>
 <span id="names"></span></br>
 </body>
</html>

popup.htm

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="utf-8">
 <title>pop</title>
 </head>
 <body>
 <script>
window.queryOpenPopups = function()
{
 var count = 0;
 var hInterval = setInterval(function () {
 try
 {
 if(window.opener)
 {
 window.opener.postMessage(JSON.stringify({"event":"QueryOpenWindows","name": window.name}),"*");
 clearInterval(hInterval);
 } else count++;
 }
 catch(e)
 {
 count++;
 } 
 if(count> 50)window.close();
 }, 100);
};
window.onbeforeunload = function(){
 window.opener.onClosePopup(window.name);
};
//restore link with opener on refresh
window.opener.postMessage(JSON.stringify({"event":"RestoreOpenWindow","name": window.name}),"*");
window.onload=function(){ document.getElementById("name").innerHTML = window.name; };
 </script> 
 <span id="name"></span>
 </body>
</html>
原作者:
...