【发布时间】:2011-10-26 16:38:40
【问题描述】:
如果所有打开的浏览器窗口与试图获取列表的窗口来自同一个域,有没有办法获取它们的列表?
【问题讨论】:
-
非常非常怀疑。 JavaScript(在大多数浏览器中?)被沙箱化到当前选项卡/窗口。
标签: javascript window
如果所有打开的浏览器窗口与试图获取列表的窗口来自同一个域,有没有办法获取它们的列表?
【问题讨论】:
标签: javascript window
一般来说不会。
除非窗口之间存在“连接”(例如,一个窗口使用 window.open 打开所有其他窗口),否则由于安全原因,浏览器窗口无法交互。
编辑:
如果您为窗口指定名称,您可以在刷新父页面后重新控制它。
windowVar = window.open('somePage.html', 'windowName'); 打开一个名为 windowName 的子窗口。
刷新父页面后,windowVar = window.open('', 'windowName');将变量windowVar与名称为windowName的窗口重新关联。
现在,windowVar.location.href= 'logout.html'; 允许您注销您的用户。
编辑:
假设你使用 PHP,你可以这样做:
使用函数logged_in 创建logged.php,以验证会话ID 是否仍然有效。
<?php
if (isset($_GET['sid']))
if (logged_in($_GET['sid']))
echo "in";
else
echo "out";
?>
在您的页面中包含check() 函数。
function check()
{
var url = "http://redtwitz.com/test/logged.php?sid=" + sessionId;
var request;
try
{
request = new XMLHttpRequest();
}
catch(error1)
{
try
{
request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(error2)
{
request = new ActiveXObject("Microsoft.XMLHTTP");
}
}
request.open("GET", url, false);
request.setRequestHeader("User-Agent",navigator.userAgent);
request.send(null);
if(request.status==200)
if(request.responseText == "out")
window.location.href = "logout.html";
}
每 5 秒调用一次检查函数。
<body onload="setInterval(check, 5000);">
【讨论】:
或者,您可以使用扩展 api 实现 Chrome 扩展并完成您的任务:http://code.google.com/chrome/extensions/tabs.html 但它只适用于 Chrome 浏览器。
【讨论】: