javascript - 选项卡时如何将焦点设置到子窗口和开启器窗口

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

最佳答案

你到底想达到什么目的?要将焦点设置在另一个窗口的内部到第一个链接/按钮/表单字段/等等?或者使其他窗口(浏览器选项卡)成为事件浏览器选项卡?

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

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

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

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

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

不过,还有一些要补充的:

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

关于javascript - 选项卡时如何将焦点设置到子窗口和开启器窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17237542/

相关文章:

javascript - 如何使用 jQuery 捕获不同父级下具有相同类的 html 元素?

javascript - 如何将变量放入cookie中?

javascript - 为什么我的 Controller 显示 {{message}},像这样而不是实际配置的消息

JavaScript 函数访问对象属性

java - 在没有 html、浏览器和 Appletviewer 的情况下查看 Java Applet?

php - 为什么在 laravel 中按下浏览器的后退按钮时过滤器不起作用?

javascript - 在 Javascript 中显示带有自定义消息的确认框

c# - 使用 wpf 浏览器取消导航

javascript - 帮助将图像动态加载到 Galleria

javascript - 桌面 webapp 中的多点触控手势