在另一个浏览器选项卡中时,如何将焦点设置回父窗口?我试过:
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...
最佳答案
你到底想达到什么目的?要将焦点设置在另一个窗口的内部到第一个链接/按钮/表单字段/等等?或者使其他窗口(浏览器选项卡)成为事件浏览器选项卡?
无论如何 - 可能 opener.focus()
调用不起作用,因为两个窗口不是从同一源提供的。尝试通过 postMessage 设置通信 channel 解决这个问题。所以在 opener
文档中,监听这样一个事件:
window.addEventListener('message', function (event) {
window.focus();
}, false);
然后在打开的窗口中,发送这样的消息:
opener.postMessage('foo', '*');
遗憾的是,我现在无法测试这是否有效。 (不过我想它应该...)
不过,还有一些要补充的:
- 一些旧版垃圾浏览器不支持 postMessage(参见 caniuse.com)。不过,有一些解决方法。 :)
- 我使用 W3 标准符号来附加事件监听器。 IE8 及更低版本使用其专有的
attachEvent
等效项。 - 您应该将
'*'
origin 通配符替换为打开器窗口的实际来源。 - 在消息事件监听器函数中,您应该检查 event.origin 并且仅在来源正确时才运行您的实际负载。
关于javascript - 选项卡时如何将焦点设置到子窗口和开启器窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17237542/