Javascript:查找使用相同域打开的浏览器窗口

And*_*Dev 5 javascript window

有没有办法获得所有打开的浏览器窗口的列表,如果它们来自与尝试获取列表的窗口相同的域?

Den*_*nis 9

一般来说,没有.

除非窗口之间存在"连接"(例如,一个窗口打开所有其他窗口使用window.open),否则由于安全原因,浏览器窗口无法进行交互.

编辑:

如果为窗口指定了名称,则可以在刷新父页面后重新获得对其的控制权.

  1. windowVar = window.open('somePage.html', 'windowName');打开一个带有名称的子窗口windowName.

  2. 刷新父页面后,windowVar = window.open('', 'windowName');将变量windowVar与名称窗口重新关联windowName.

  3. 现在,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";
?>
Run Code Online (Sandbox Code Playgroud)

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";
}
Run Code Online (Sandbox Code Playgroud)

每5秒呼叫检查功能.

<body onload="setInterval(check, 5000);">
Run Code Online (Sandbox Code Playgroud)