【问题标题】:How to set focus to child and opener windows when tabbed选项卡时如何将焦点设置到子窗口和开启者窗口
【发布时间】:2013-06-21 14:16:53
【问题描述】:

在另一个浏览器选项卡中时,如何将焦点设置回父窗口?我试过了:

window.opener.focus();

无济于事。它似乎仅在窗口未停靠时才有效。

我需要它在 Chrome、IE9/10、Firefox 和 Safari 中工作。

Internet Explorer 似乎在将焦点设置到子窗口时也存在问题。例如。使用时:

var windowRef = window.open(url);

然后从同一个选项卡:

windowRef.focus(); // ok in Chrome, doesn't seem to work in IE...

【问题讨论】:

    标签: javascript browser


    【解决方案1】:

    您到底想实现什么?要将焦点 inside 另一个窗口设置到第一个链接/按钮/表单域/什么?还是让其他窗口(浏览器选项卡)成为活动的浏览器选项卡?

    无论如何 - 也许opener.focus() 调用不起作用,因为两个窗口不是从同一来源提供的。尝试通过postMessage 设置通信渠道来解决此问题。所以在opener 文档中,监听这样的事件:

    window.addEventListener('message', function (event) {
        window.focus();
    }, false);
    

    然后在打开的窗口中,像这样发送消息:

    opener.postMessage('foo', '*');
    

    很遗憾,我现在无法测试这是否有效。 (不过我想应该是……)

    不过要补充几点:

    1. 一些旧版垃圾浏览器不支持 postMessage(请参阅 caniuse.com)。不过,有一些解决方法。 :)
    2. 我使用 W3 标准符号来附加事件侦听器。 IE8 及更低版本使用其专有的 attachEvent 等效项。
    3. 您应该将'*' 原点通配符替换为打开器窗口的实际原点。
    4. 在消息事件侦听器函数中,您应该检查 event.origin 并仅在来源正确的情况下运行您的实际负载。

    【讨论】:

    • 谢谢defaude,我会试一试告诉你
    • 不幸的是,这也不起作用 :( - 是的,我的目的是让其他浏览器选项卡成为活动选项卡。
    • 嗯,太糟糕了。如果我能找到时间,我会考虑对此进行测试,并可能为您找到解决方案:)
    • 真的很抱歉,但我想这是不可能的:(
    猜你喜欢
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多