防止浏览器失去对外部应用程序调用的关注

时间:2013-09-30 19:29:07

标签: javascript browser skype

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

感谢。

3 个答案:

答案 0 :(得分:4)

您需要做的事情显然是从我的网络搜索中称为“焦点窃取”。

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

我只是用谷歌搜索“焦点窃取”(这是JavaScript唯一的解决方案需要做的才能完成这项工作)并发现许多答案显示,虽然理论上可行,但取决于Windows的配置窃取焦点远离Skype在大多数情况下,浏览器可能无法正常工作。

谷歌链接中的投诉很多,而且有些答案存在冲突,但看起来可靠的“窃取焦点”回到浏览器是不会得到支持的。

这是一件好事,如果你考虑一下 - 我个人并不希望我的浏览器中运行任何旧的JavaScript程序将我的工作重点从我正在工作的东西改为浏览器 - 这将是一个令人烦恼的行为,网页最多能够做到,使我的系统在最坏的情况下无用。

如果你能在这种情况下使用浏览器允许的某种方法,那么其他人也可以这样做 - 甚至是恶意网站。

最好的答案是永远不要让焦点离开浏览器,但我不知道如何在特定情况下做到这一点。也许用于启动Skype的任何方式可能都有一个选项或某种东西可以在后台或其他任何地方启动它,从不改变焦点。

我没有涉及与Apple操作系统,Linux或移动操作系统有关的特定链接,但我也有同样的担忧和限制也适用于那些。

以下是Google搜索中的一些链接(对于您的需求的坏消息感到抱歉):

Microsoft Answers Forum Post

Focus stealing is evil

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

答案 1 :(得分:1)

你可以在新窗口中打开它,然后关闭新窗口并重新聚焦你的

像:

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)

答案 2 :(得分:1)

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

我甚至试过一个脚本永久地将焦点放在搜索文本框中:

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

仍然没有运气。

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

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可能会警告用户原始页面正在尝试关闭。

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