Javascript:如何获得所有打开窗口的列表
Javascript: How to get a list of all open windows
假设您使用以下命令打开几个窗口:
window.open(url1,'win1');
window.open(url2,'win2');
window.open(url3,'win3');
(每个窗口有一个唯一的名称)
然后刷新页面。
3个弹出窗口仍然打开。有没有一种方法可以列出所有打开的窗口的名称并关闭它们?
这不是一个重复问题
在这个问题中,浏览器正在刷新,所以你不能简单地使用全局数组来跟踪子窗口。
这不是一个重复问题
问题结束了,我会根据评论和研究给出答案。
首先,感谢所有评论的人的帮助。
回答:没有内置对象跟踪打开的窗口并从页面加载到页面加载持续存在。
正如Felix Kling指出的,使用localStorage是一种可能的解决方法。
尝试在同一域内的现有窗口之间进行通信。这就是我要解决同样问题的方法。参见:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
你可以
<!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>
相关文章:
- 剑道UI下拉列表在剑道窗口内不起作用
- 如何在从代码后面显示之前,在弹出窗口中选择预先填充的下拉列表选项
- 当我点击打开另一个弹出窗口时,如何强制关闭弹出窗口
- jquery-mobile的列表视图中的两个弹出窗口
- 保留动态创建的下拉列表's在事件窗口.history.back()上选择的值-JavaScript
- 刷新窗口后,下拉列表未保持选中状态
- 如果窗口宽度小于 600,则单击下拉列表
- 新项目的所有列表项弹出窗口在悬停时立即显示 - Javascript
- 谷歌地图API v3 - 通过外部单击打开信息窗口
- Sharepoint Jquery - 我可以在关闭列表项上的“编辑属性”窗口后运行脚本吗?
- 如何在jQuery弹出窗口中显示下拉列表选择列表并检索所选值
- 如何在 jquery 的自动完成下拉列表旁边显示弹出窗口
- 隐藏或删除在下拉列表中选择后在颜色框弹出窗口上的复选框
- 将信息窗口内容添加到多个选择列表中单击 JavaScript
- 通过新窗口从Javascript选择列表打开链接
- 在列表视图窗口 8 中进行分页
- 无法在 jquery 模式窗口中填充下拉列表
- 如何在窗口宽度处删除类列表 - jquery/javascript
- HTML列表信息进入弹出窗口
- 如何将在新窗口中创建的新元素的数据返回到下拉列表中