7

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

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...
4

1 回答 1

0

你到底想达到什么目的?将另一个窗口的焦点设置到第一个链接/按钮/表单字段/什么?或者使另一个窗口(浏览器选项卡)成为活动浏览器选项卡?

无论如何-也许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 并仅在来源正确的情况下运行您的实际有效负载。
于 2013-06-22T11:35:18.323 回答