Javascript Safari和Chrome浏览器的对象焦点问题

Javascript Safari和Chrome浏览器的对象焦点问题,javascript,flash,actionscript-3,safari,Javascript,Flash,Actionscript 3,Safari,我调用了以下javascript,以在加载页面时请求焦点 这段代码在Firefox和IE7上100%正常,但Chrome和Safari似乎根本没有转移注意力。如何使它与所有浏览器一起工作 document.getElementById("MyFlashFile").focus(); 确保在呈现整个页面后调用此代码。它可能被调用在它引用的HTML之上,因此该元素还不存在 各种JavaScript框架都有实用程序来告诉您什么时候启动。不幸的是,没有办法确保您可以将焦点设置为在所有浏览器中都能工作

我调用了以下javascript,以在加载页面时请求焦点

这段代码在Firefox和IE7上100%正常,但Chrome和Safari似乎根本没有转移注意力。如何使它与所有浏览器一起工作

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

确保在呈现整个页面后调用此代码。它可能被调用在它引用的HTML之上,因此该元素还不存在


各种JavaScript框架都有实用程序来告诉您什么时候启动。

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

如果你在YouTube或其他视频/flash网站上注意到,你看到的第一件事就是吸引你点击播放器,那就是由于这个问题

一位开发人员想出了一个聪明的解决办法,但它确实涉及到在flash文件中添加一些ActionScript,如果你正在构建一个通用播放器,这可能是一个麻烦

加里·毕肖普:

另一种解决方案是将wmode设置为不透明。我听说这在某些情况下是有效的,但会使文本区域中的光标出错。我在这方面也不太走运,不过你可以试试看


您可以找到有关无焦点bug的更多信息。

Chrome中似乎有一个bug:

“window.document.getElementById('swfID').focus()不适用于flash对象”

我试图找到一个解决办法,但没能找到;(

问候,,
Christian

我花了几个小时在互联网上搜索,但最终我找到了一个可以在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()">

函数setFocusOnFlash(){
var f=swfobject.getObjectById('myFlashObjectId');
如果(f){f.tabIndex=0;f.focus();}
}
本例假设flash是使用SWFOObject库嵌入的。如果不是,则应将f变量设置为保存flash电影的对象或嵌入标记

于2012年5月5日编辑:不幸的是,
tabIndex
解决方案似乎不再适用于浏览器(Chrome/Safari)和操作系统的所有组合。 例如,目前Windows上的Chrome18出现故障


查看Christian Junk提供的下面的链接,以获取问题解决的状态。

除了Cláudio Silva的答案外,您还需要设置
wmode=“不透明”

Adam,检查下面Cláudio Silva的解决方案。它对我有效:)。这对我无效。为getObjectById()指定的ID是什么?通过attributes.ID或swfObject.embedSWF()调用的第二个参数提供给swfObject的ID?Silva您的解决方案太棒了!几个月来,我一直在寻找解决这个问题的办法。最后,我找到了它。谢谢你的来信-克里斯也不为我工作。作为测试,我尝试在
if
语句中添加一个警报。警报确实显示,但闪光灯未聚焦。我还尝试创建一个只包含文本框(没有flash)的简单页面,并将焦点设置为该文本框,该文本框在那里确实有效,但不适用于flash页面。我还尝试使用
document.getElementById
而不是
swfobject.getObjectById
,这仍然有相同的结果。因此,似乎还有其他问题,因为我们知道
focus()
函数确实有效,并且正在被调用。这一切都适用于IE和FF,但不适用于Chrome或Safari。有什么建议吗?正如@Tim TJey Jun在下面提到的,要让它在Chrome 12中工作,您需要添加
params.wmode=“不透明”。对我来说,这让它开始在Chrome和IE中完美工作,但FF和Safari比以往任何时候都糟糕。现在,无论是否单击文本字段,都不能键入任何内容。我想我可以做一个浏览器检查,只为Chrome设置该参数,但如果有人有,我真的希望有一个更好的解决方案。我这样放置代码,它提供flash焦点,但不提供键盘焦点。这在当前的Chrome for Windows版本(版本28.0.1500.72 m)中仍然不起作用提供的解决方案也都不起作用。