焦点选项卡或窗口
对于一个小应用程序,我从我的脚本打开几个窗口/标签。 浏览器是打开窗口还是选项卡当然不在我手中。
但是,我保留了对新创建的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
这是为了确保选项卡是唯一的,以防我在浏览器中有多个CMS(支持多个客户端):
目标= “#cgi.server_name#wvAdmin”
最后,在CMS中的框架加载器上,添加此…
…确保如果用户自己打开CMS,我们仍然可以使用它。
打开新的浏览器窗口/标签是有问题的。 您是否考虑过jqueryui对话框而不是打开新窗口?
- Firefox innerHTML Bug?
- 使用Jquery在Firefox中为背景位置设置动画
- Firefox扩展包括main.js文件中的脚本
- 仅使用jQuery的Firefox错误 – handleObj.handler.apply不是一个函数
- children.innerText在firefox中不起作用
- 当用户点击不在Firefox中工作的特定div时,防止模糊
- window.location.replace(href)后面的后退按钮失败;
- 将jQuery UI添加到Greasemonkey脚本失败,外部CSS文件
- Jquery .show()和.hide()甚至.css({“display”:“none”}); 不在firefox工作?