8

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

这段代码在 Firefox 和 IE7 上运行 100% OK,但 Chrome 和 Safari 似乎根本没有转移焦点。如何使其适用于所有浏览器?

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

5 回答 5

16

我花了几个小时在 Internet 上搜索,但最终我找到了适用于最新版本 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 标记。

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

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

于 2010-09-15T14:24:42.567 回答
4

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

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

一位开发人员想出了一个巧妙的解决方法,但它确实涉及将一些 ActionScript 添加到您的 flash 文件中,如果您正在构建一个通用播放器,这可能会让人头疼。

Gary Bishop:修复 Firefox Flash 的愚蠢性

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

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

于 2009-02-28T01:04:10.803 回答
4

Chrome中似乎有一个错误:

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

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

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

问候, 克里斯蒂安

于 2010-02-09T18:32:47.233 回答
1

除了 Cláudio Silva answer 之外,您还需要设置wmode="opaque"

于 2011-05-15T23:31:28.273 回答
0

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

各种 JavaScript 框架都有实用程序来告诉您DOM 何时准备就绪

于 2009-02-27T14:53:01.787 回答