加载页面时,我调用了以下 javascript 来请求焦点。
这段代码在 Firefox 和 IE7 上运行 100% OK,但 Chrome 和 Safari 似乎根本没有转移焦点。如何使其适用于所有浏览器?
document.getElementById("MyFlashFile").focus();
加载页面时,我调用了以下 javascript 来请求焦点。
这段代码在 Firefox 和 IE7 上运行 100% OK,但 Chrome 和 Safari 似乎根本没有转移焦点。如何使其适用于所有浏览器?
document.getElementById("MyFlashFile").focus();
我花了几个小时在 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提供的链接,以获取问题解决的状态。
不幸的是,没有办法确保您可以将焦点设置到适用于所有浏览器的 flash 文件。IE 和 Firefox 已经解决了这个问题(大部分),但 Chrome 和 Safari 都基于 Webkit,没有解决方案。
如果您在 YouTube 或其他视频/flash 网站上注意到您看到的第一件事是诱使您点击播放器,那是由于这个问题。
一位开发人员想出了一个巧妙的解决方法,但它确实涉及将一些 ActionScript 添加到您的 flash 文件中,如果您正在构建一个通用播放器,这可能会让人头疼。
Gary Bishop:修复 Firefox Flash 的愚蠢性
另一种解决方案是将您的 wmode 设置为不透明。我听说这在某些情况下有效,但会搞砸文本区域中的光标。我也没有太多运气,但你可以试一试。
您可以在bugzilla上找到有关无焦点错误的更多信息。
Chrome中似乎有一个错误:
“window.document.getElementById('swfID').focus() 不适用于 Flash 对象”
http://code.google.com/p/chromium/issues/detail?id=27868
我试图找到一种解决方法,但我找不到;(
问候, 克里斯蒂安
除了 Cláudio Silva answer 之外,您还需要设置wmode="opaque"
确保在呈现整个页面后调用此代码。它可能在它所引用的 HTML 之上被调用,因此该元素尚不存在。
各种 JavaScript 框架都有实用程序来告诉您DOM 何时准备就绪。