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

时间:2011-10-26 16:38:41

标签: javascript window

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

2 个答案:

答案 0 :(得分:9)

一般来说,没有。

除非窗口之间存在“连接”(例如,一个窗口使用window.open打开所有窗口),因为安全原因,浏览器窗口无法进行交互。

修改

如果您为窗口指定了名称,则可以在刷新父页面后重新控制它。

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

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

  3. 现在,windowVar.location.href= 'logout.html';可让您退出用户。

  4. 修改

    假设你使用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浏览器。