选项卡时如何将焦点设置为子窗口和开启窗口

时间:2013-06-21 14:16:54

标签: javascript browser

如何在另一个浏览器标签中将焦点设置回父窗口?我试过了:

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

1 个答案:

答案 0 :(得分: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并仅在原点正确时运行您的实际有效负载。