2009-02-27 100 views
8

我在调用页面时请求焦点以下JavaScript。Safari和Chrome浏览器的对象焦点问题

此代码与Firefox和IE7完全兼容,但Chrome和Safari似乎并没有将焦点放在所有位置。如何使它适用于所有浏览器?

document.getElementById("MyFlashFile").focus(); 
+0

这仍然无法在Chrome for Windows的当前构建工作(版本28.0.1500.72米)没有提供解决方法的工作,要么。 – Josh 2013-07-26 21:44:04

回答

0

确保整个页面已经被渲染后,该代码被调用。它可能被称为HTML所引用的HTML之上,所以该元素将不存在。

各种JavaScript框架有实用程序告诉你何时DOM is ready

4

不幸的是,没有办法确保您可以将焦点设置为适用于所有浏览器的Flash文件。 IE和Firefox已经解决了这个问题(大部分情况),但Chrome和Safari都是基于Webkit的,它没有解决方案。

如果您曾在YouTube或其他视频/ Flash网站上发现您首先看到的东西是诱使您点击播放器,那是由于此问题。

一位开发人员想出了一个聪明的解决方法,但它的确涉及到将一些ActionScript添加到您的Flash文件,如果您正在构建一个通用播放器,这可能是一个痛苦的屁股。

加里·毕晓普:Fixing Firefox Flash Foolishness

的解决方案另一类是您的wmode设置为不透明。我在某些情况下听说过这个方法,但是会在文本区域搞砸游标。我也没有太多的运气,但你可以尝试一下。

您可以在bugzilla找到更多有关无焦点错误的信息。

+0

亚当,请查看下面的CláudioSilva的解决方案。它为我工作:)。 – Anvaka 2010-09-15 16:05:43

16

它花了我几个小时搜索互联网,但最终我找到了一个适用于最新版本的IE,Firefox,Chrome和Safari的解决方案。 下面的代码解决了这个问题为好:

<head> 
    <script type="text/javascript" src="swfobject.js"></script> 
    <script> 
    function setFocusOnFlash() { 
     var f=swfobject.getObjectById('myFlashObjectId'); 
     if (f) { f.tabIndex = 0; f.focus(); } 
    } 
    </script> 
</head> 
<body onload="setFocusOnFlash()"> 

这个例子假设闪光灯使用SWFObject的库嵌入。如果不是,则应该将f变量设置为保存Flash影片的Object或Embed标记。

上编辑5 2012年5月:嗯,可惜似乎tabIndex解决方法不再适用于浏览器(Chrome/Safari浏览器)和操作系统的所有组合。例如,目前Windows上的Chrome 18失败。

查看下面的链接,由提供基督教垃圾,以获得问题的解决状态。

+0

这不适合我。什么是为getObjectById()指定的ID?通过attributes.id或swfobject.embedSWF()调用的第二个参数提供给swfObject的ID? – BadmintonCat 2011-03-26 04:18:26

1

除了克劳迪奥·席尔瓦的答案,你需要设置wmode="opaque"