焦点选项卡或窗口

时间:2011-11-15 10:53:14

标签: javascript jquery firefox

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

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

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

我找到了这个答案How to focus window/tab like alert()?

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

如何配置?

11 个答案:

答案 0 :(得分:13)

以下似乎适用于IE8和FF13:

<script type="text/javascript">
// Stupid script to force focus to an existing tab when the link is clicked.
// And yes, we do need to open it twice.
function openHelp(a) {
    var tab = window.open(a.href, a.target);
    tab.close();
    tab = window.open(a.href, a.target);
    return false;
}
</script>
<a href="help.html" target="help" onclick="return openHelp(this);">Help</a>

答案 1 :(得分:7)

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

要强制使用窗口而不是标签,请使用win = window.open("http://www.google.com", "test" ,"modal=yes");,然后在您愿意的时候致电win.focus();

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

答案 2 :(得分:2)

请参阅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

答案 3 :(得分:2)

您是否尝试过window.focus()

答案 4 :(得分:2)

没有真正的方法可以做到这一点,原因很简单,如果网站有这种能力,他们最终会用它来自动聚焦广告或其他什么。

可以这样做,但只有在Firefox中,用户启用了它,而他很可能不会这样做。

答案 5 :(得分:1)

要回答问题:我找到了http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#RaiseLowerSetting,其中说明您要查找的设置称为“允许升高和降低窗口”。

另一个设置是about:config/dom.disable_window_flip(为假),找到here

答案 6 :(得分:1)

您是否尝试过菜单工具 - &gt;选项...... - &gt;内容标签 - &gt; “启用JavaScript”旁边的高级按钮,选中名为“升级或降低Windows”的框?

可以找到有关如何设置焦点的示例here

答案 7 :(得分:1)

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

<script type="text/javascript">
// Stupid script to force focus to an existing tab when the link is clicked.
// And yes, we do need to open it twice.
function loadAdmin(a) {
    var tab = window.open(a.href, a.target);
    tab.close();
    tab = window.open(a.href, a.target);
    return false;
}
</script>

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

<h1>
    Page Heading
    <a href="/admin/main/?load=pages/page.cfm?id=#request.pageid#" title="Edit this page"
        onclick="return loadAdmin(this);"
        target="#cgi.server_name#wvAdmin"            
    ><img src="/media/admin/icon-edit.png" alt="Edit this page"/></a>
</h1>

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

  

目标=&#34;#cgi.server_name#wvAdmin&#34;

最后,在CMS中的帧加载器上,添加此...

<script type="text/javascript">
    window.name = '#cgi.server_name#wvAdmin';
</script>

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

答案 10 :(得分:-1)

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

相关问题