【问题标题】:window.focus(), self.focus() not working in firefoxwindow.focus(), self.focus() 在 Firefox 中不起作用
【发布时间】:2011-02-01 18:17:43
【问题描述】:

大家好,我正在开发一个聊天应用程序...我有多个聊天窗口...我想知道哪个窗口包含新消息...我有以下代码..

function getCount()
{
    $.ajax({
       type: "POST",
       url: baseUrl + '/Chat/count',
       data: "chat_id=" + document.ajax.chat_id.value,
       success: function(msg){
                if(msg == 'new1') {
                    self.focus();
                                            //window.focus();

                }
            }
    });
}

如果一个接线员同时参加两个聊天......

例如,网址就像 http://localhost/nisanth/admin/Chat/index/chatId/15 http://localhost/nisanth/admin/Chat/index/chatId/16

http://localhost/nisanth/user/Chat/index/chatId/15 http://localhost/nisanth/user/Chat/index/chatId/16

如果user 16 输入消息我需要关注

http://localhost/nisanth/admin/Chat/index/chatId/16

这段代码在 IE 下可以正常工作,但在 Firefox 中不行...请给我一个解决方案...上面的代码在同一个 html 中

【问题讨论】:

  • 我看不出它在 IE 中是如何工作的; self 在引用的代码中未定义。如果它在其他地方定义,最好表明这一点,因为了解它的含义很重要。
  • “...我想知道哪个窗口包含新消息...”与focus 没有达到您的预期有何关系? (另外,你能解释一下你的意思吗?)
  • @Nisanth: window 可能是,但又不是self,除非您在其他地方定义它。 self 不是内置对象。这是很多人在闭包中使用的名称,当他们想要从闭包中引用 this 值时,他们将其作为回调/事件处理程序传递,但要做到这一点,您必须实际定义它(例如, var self= this;)。
  • self.focus() 在 IE8 中工作
  • 好吧,@Nisanth;这与在 Firefox 中什么可以工作的问题无关,因为在 Firefox 中它是在用户控制之下的。

标签: javascript jquery jquery-plugins


【解决方案1】:

如果设置了安全选项,Firefox 只会服从引发窗口的请求,并且默认情况下没有设置。据我所知,Chrome 根本不会关注 focus() 请求。 Safari 确实服从 focus() 请求。

特定的 Firefox 设置在“工具”->“选项”(Linux 上的“编辑->首选项”,可能是 MacOS)对话框中。有一个“内容”选项卡,其中有一个用于启用 Javascript 的复选框。与 that 一起是一个“高级”按钮,它会打开 另一个 对话框,其中可以找到一个复选框以允许(或禁止)通过页面代码升高和降低窗口。

编辑:这是一个测试页面:http://gutfullofbeer.net/focus1.html,当页面调用window.focus() 时,您应该能够看到 Firefox 打开一个窗口。您必须设置浏览器,以便新窗口(使用 window.open() 创建)在新的单独窗口而不是选项卡中打开,否则您可以在辅助页面打开时撕下它的选项卡。

【讨论】:

  • 那么你一定是做错了什么,因为它确实有效。当您认为您正在调用“window.focus()”时,您是否尝试过发出“alert()”?
  • alert 正在工作,self.blur(),working,window.moveTo() 这些都在工作 :(... 如果 alert() 正在工作,那么窗口会聚焦,但我的客户不不想要那个;)
  • 我在自己的应用程序中使用了 window.focus(),并且我 100% 确定当浏览器配置为允许时它在 Firefox 中有效。
  • 遗憾的是,这个答案不再相关,因为首选项窗口发生了巨大变化,并且不再在那里找到设置。
  • @ThomasPaine 古老的 Stackoverflow 问题是一个有趣的问题。
【解决方案2】:

我遇到了同样的问题,虽然我的JS脚本有问题,经过长时间的搜索我找到了解决方案:

1) 在新标签页中,在地址栏中输入about:config,然后按“Enter”按钮。点击按钮“我接受风险!”为了确认警告

2) 在搜索字段中,输入 dom.disable 以获取 dom.disable_window_flip

3)如果dom.disable_window_flip属性为true,双击该属性将值从true切换为false

【讨论】:

    【解决方案3】:

    对于希望专注于一个选项卡的其他人,另一个选项卡(选项卡 A)可以将另一个选项卡(选项卡 B)放在前面。

    如果选项卡 B 的 window.name 是“myWindow123”,则在选项卡 A 中运行:

    window.open('', 'myWindow123');
    

    如果您想重新关注打开您的选项卡,请运行:

    window.open('', window.opener.name);
    

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 2011-02-15
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 2012-02-27
      相关资源
      最近更新 更多