5

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

谢谢。

4

3 回答 3

4

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

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

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

谷歌链接中的抱怨很多,一些答案相互冲突,但看起来可靠地“窃取焦点”回到浏览器不会得到支持。

不过,如果您考虑一下,这是一件好事——我个人不希望在我的浏览器中运行任何旧的 JavaScript 程序来将我的注意力从我正在处理的内容转移到浏览器上——这将是一个非常烦人的事情一个网页最好的行为,使我的系统在最坏的情况下无用。

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

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

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

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

Microsoft Answers 论坛帖子

窃取焦点是邪恶的

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

于 2013-10-09T23:01:15.327 回答
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)
于 2013-10-04T20:46:39.133 回答
1

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

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

于 2013-10-09T22:49:21.563 回答