有没有办法获取所有打开的浏览器窗口的列表,如果它们来自与尝试获取列表的窗口相同的域?
答案 0 :(得分:9)
一般来说,没有。
除非窗口之间存在“连接”(例如,一个窗口使用window.open
打开所有窗口),因为安全原因,浏览器窗口无法进行交互。
修改强>
如果您为窗口指定了名称,则可以在刷新父页面后重新控制它。
windowVar = window.open('somePage.html', 'windowName');
打开一个名为windowName
的子窗口。
刷新父网页后,windowVar = window.open('', 'windowName');
会将变量windowVar
与名称windowName
的窗口重新关联。
现在,windowVar.location.href= 'logout.html';
可让您退出用户。
修改强>
假设你使用PHP,你可以这样做:
使用函数logged.php
创建logged_in
,验证会话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);">
答案 1 :(得分:1)
或者,您可以使用扩展程序API实现Chrome扩展程序并执行任务:http://code.google.com/chrome/extensions/tabs.html 但它仅适用于Chrome浏览器。