在加载页面时,我调用了以下javascript来请求焦点。
此代码在Firefox和IE7上100%正常运行,但Chrome和Safari似乎根本没有移动焦点。如何使它适用于所有浏览器?
document.getElementById("MyFlashFile").focus();
答案 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。