【问题标题】:Javascript: Find browser windows open with the same domainJavascript:查找使用相同域打开的浏览器窗口
【发布时间】:2011-10-26 16:38:40
【问题描述】:

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

【问题讨论】:

  • 非常非常怀疑。 JavaScript(在大多数浏览器中?)被沙箱化到当前选项卡/窗口。

标签: javascript window


【解决方案1】:

一般来说不会。

除非窗口之间存在“连接”(例如,一个窗口使用 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_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);">

【讨论】:

  • 一个窗口确实打开了另一个窗口,但我注意到如果我重新加载父页面,子页面不再连接到父页面。
  • @AndroidDev 这似乎是正确的,因为如果你重新加载页面,调用者窗口的JS窗口对象是一个新的。
  • 因此,如果我的父页面有一个退出按钮,按下该按钮会导致父页面重新加载,子页面看起来仍然像已登录。因为父页面无法再与子页面通信,所以任何关于如何让孩子重新加载自己的想法?我注意到,如果您在 Gmail 中执行此操作,两者会保持同步。也许谷歌正在轮询两个窗口来完成这个??
  • 退出按钮可能会在父页面被告知重新加载之前触发子页面上的操作。
  • @James:如果在按下退出按钮之前重新加载父页面,这将无法直接工作。
【解决方案2】:

或者,您可以使用扩展 api 实现 Chrome 扩展并完成您的任务:http://code.google.com/chrome/extensions/tabs.html 但它只适用于 Chrome 浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多