焦点选项卡或窗口

对于一个小应用程序,我从我的脚本打开几个窗口/标签。 浏览器是打开窗口还是选项卡当然不在我手中。

但是,我保留了对新创建的window对象的引用,并且我确实从另一个窗口“远程”更改了它们的内容。 这一切都发生在同一个document.domain下,所以没有xss问题。

问题是,我无法可靠地focus那些创建的窗口/标签。 由于我正在为客户编写一个非常具体的应用程序,因此我只将Firefox定位为浏览器。 我有一个选择当然只是做一个remoteWindow.alert('foobar'); 把窗口/标签放到前面,但这很难看,不是吗。

我找到了这个答案如何将窗口/标签聚焦为alert()?

并且据说,Firefox有一个允许脚本焦点的选项。 所以最后我的问题是,那个选项是什么? 我搜索了about:config for“tabs”和“focus”但没有发现任何相关内容。

如何配置?

我看到的唯一解决方案是在新窗口中强制弹出窗口,因为似乎没有办法聚焦另一个选项卡。 此解决方案还要求您更改Tools > Options > Content tab的默认Javascript安全设置,然后单击Enable Javascript复选框旁边的Advanced按钮,并选中中间框以允许聚焦窗口。

要强制使用窗口而不是制表符,请使用win = window.open("http://www.google.com", "test" ,"modal=yes"); 然后调用win.focus(); 无论何时你想要它。

编辑:实际上忘了提到这只是FF的事实。

以下似乎适用于IE8和FF13:

  Help 

请参阅Mozilla的文档: https : //developer.mozilla.org/en/Code_snippets/Tabbed_browser 。

  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator); var browserEnumerator = wm.getEnumerator("navigator:browser"); // Check each browser instance while (browserEnumerator.hasMoreElements()) { var browserWin = browserEnumerator.getNext(); var tabbrowser = browserWin.gBrowser; // Check each tab of this browser instance var numTabs = tabbrowser.browsers.length; for (var index = 0; index < numTabs; index++) { var currentBrowser = tabbrowser.getBrowserAtIndex(index); if (/*some logic*/) { // For an example tabbrowser.selectedTab = tabbrowser.tabContainer.childNodes[index]; // Focus *this* browser-window browserWin.focus(); break; } } 

这是一个更简单的事件驱动方法 - https://developer.mozilla.org/En/Listening_to_events_on_all_tabs

你试过window.focus()吗?

没有真正的方法可以做到这一点,原因很简单,如果网站具备这种能力,他们最终会使用它来自动聚焦广告或诸如此类的东西。

它可以完成,但仅在Firefox中,用户启用了它,而他很可能不会。

回答你的问题 :我找到了http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#RaiseLowerSetting ,它说你正在寻找的设置称为“允许boost和降低窗口”。

另一个设置是about:config/dom.disable_window_flip (为false),在这里找到。

您是否尝试过“启用JavaScript”旁边的菜单工具 – >选项… – >内容选项卡 – >高级按钮,以选中名为“升级或降低Windows”的框?

可以在此处找到有关如何设置焦点的示例。

它是脏的和丑陋的,所以它只是加信息:如果你在任何打开的选项卡/窗口中调用alert(),该选项卡将获得焦点。

简单的答案是:你做不到。 浏览器不会将这种API公开给javascript。

扩展亚历克斯的贡献。 用例是CMS。 站点所有者登录CMS时,前端加载到另一个选项卡中。 您为站点所有者提供了一个重新加载CMS选项卡并重点关注的前端链接。

将此javacript放在前端页面上(或包含在全局JS文件中):

  

我喜欢在H1内容之后放置CMS链接。 同样,这只有在他们登录CMS时才会出现。 在这种情况下,我指向一个框架CMS,所以它必须知道加载到主框架(双关语意图)。

 

Page Heading Edit this page

这是为了确保选项卡是唯一的,以防我在浏览器中有多个CMS(支持多个客户端):

目标= “#cgi.server_name#wvAdmin”

最后,在CMS中的框架加载器上,添加此…

  

…确保如果用户自己打开CMS,我们仍然可以使用它。

打开新的浏览器窗口/标签是有问题的。 您是否考虑过jqueryui对话框而不是打开新窗口?