Safari和Chrome浏览器的Object Focus问题

时间:2009-02-27 13:46:50

标签: javascript flash actionscript-3 safari

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

此代码在Firefox和IE7上100%正常运行,但Chrome和Safari似乎根本没有移动焦点。如何使它适用于所有浏览器?

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

5 个答案:

答案 0 :(得分: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库嵌入了Flash。如果没有,您应该将f变量设置为包含Flash影片的Object或Embed标记。

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

请参阅 Christian Junk 提供的以下链接,以获取问题解决方案的状态。

答案 1 :(得分:4)

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

如果您在YouTube或其他视频/ Flash网站上注意到,您看到的第一件事就是诱使您点击播放器,这是由于此问题。

一位开发人员提出了一个聪明的解决方法,但确实需要在Flash文件中添加一些ActionScript,如果您正在构建通用播放器,这可能会很麻烦。

Gary Bishop:Fixing Firefox Flash Foolishness

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

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

答案 2 :(得分:4)

Chrome似乎存在错误:

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

http://code.google.com/p/chromium/issues/detail?id=27868

我试图找到一种解决方法,但我找不到一个;(

此致 基督教

答案 3 :(得分:1)

除了CláudioSilva的回答,您需要设置wmode="opaque"

答案 4 :(得分:0)

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

各种JavaScript框架都有实用程序可以告诉您何时DOM is ready