【问题标题】:preventing a browser from losing focus on external app call防止浏览器失去对外部应用程序调用的关注
【发布时间】:2013-10-10 14:51:46
【问题描述】:

我正在使用 Skype 构建一个快速的 VOIP 演示,当我按下呼叫按钮时,Skype 应用程序将焦点从浏览器上移开。您可以在这里尝试http://developer.skype.com/skype-uris/skype-uri-tutorial-webpages,在那里您会找到几个“在这里尝试”链接。当我单击这些链接时,我希望浏览器保持焦点。有没有办法做到这一点?

谢谢。

【问题讨论】:

    标签: javascript browser skype


    【解决方案1】:

    你需要做的显然是从我的网络搜索中“窃取焦点”。

    至少就 Windows 而言,似乎没有可靠的方法可以仅从浏览器执行此操作。

    我刚刚在谷歌上搜索了“焦点窃取”(这是唯一的 JavaScript 解决方案需要做的才能完成此任务),并发现许多答案表明,尽管理论上是可能的,但取决于 Windows 的配置,从 Skype 窃取焦点在大多数情况下,浏览器可能无法正常工作。

    Google 链接中的投诉很多,并且一些答案存在冲突,但似乎不会支持可靠地“窃取焦点”回到浏览器。

    不过,如果您考虑一下,这是一件好事 - 我个人不希望在我的浏览器中运行任何旧的 JavaScript 程序来将我的注意力从我正在处理的内容转移到浏览器上 - 这将是对于一个网页来说,这是一个非常烦人的行为,充其量只能让我的系统无用。

    如果您可以在这种情况下使用浏览器中允许的某种方法来做到这一点,那么其他任何人也可以做到 - 甚至是恶意网站。

    最好的答案是永远不要让焦点离开浏览器,但我不知道在你的具体情况下如何做到这一点。也许您用来启动 Skype 的任何方式都可能具有在后台启动它的选项或其他东西,永远不会改变焦点。

    我没有找到与 Apple 操作系统、Linux 或移动操作系统相关的特定链接,但我感觉同样的担忧和限制也适用于这些。

    以下是 Google 搜索中的一些链接(对于您需要的坏消息,我们深表歉意):

    Microsoft Answers Forum Post

    Focus stealing is evil

    http://pcsupport.about.com/od/windowsxp/ht/stealingfocus02.htm

    【讨论】:

      【解决方案2】:

      您可以在新窗口中打开它,然后关闭新窗口并重新关注您的窗口

      类似:

      a=window.open('skype:ohadcn?chat',10,10);
      //i couldn't find a relevant event, onload() do not work for me here
      //so i used setTimeOut, hoping that two seconds is enough to open skype but not enough to loose the user
      setTimeout(function(){ a.close();window.focus();},2000)
      

      【讨论】:

        【解决方案3】:

        我在 Chrome 中打开了 Skype 教程页面,调出控制台并尝试了 Ohad 的答案,但它不会将焦点返回到教程网页。

        我什至尝试了一个脚本来永久地将焦点放在搜索文本框中:

            function ASDF() {
              document.getElementsByName("q")[0].focus();
              setTimeout(ASDF, 1000);
            } 
            setTimeout(ASDF, 1000);
        

        还是没有运气。

        我尝试更改 Ohad 的脚本,以便在打开 Skype 应用程序后在新窗口中重新打开教程页面。如果教程/控制台页面是窗口中唯一的选项卡,它将起作用:

        a=window.open('skype:ohadcn?chat',10,10);
        setTimeout(function(){ 
          a.close();
          a=window.open('http://developer.skype.com/skype-uris/skype-uri-tutorial-webpages', 10, 10);
          window.close();},2000);
        

        但是,如果教程页面/控制台脚本与其他选项卡位于窗口中,它不会将焦点返回到重新打开的页面。更不用说,IE 可能会警告用户原始页面正在尝试关闭。

        我认为没有办法始终如一地实现您的目标,但我保留犯错的权利。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-04
          • 1970-01-01
          • 2011-03-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多