我一直在尝试为我的 Flash 游戏设置此测试页面,但它拒绝关注负载。我读了一堆论坛条目,但没有让它做任何事情,我真的不敢相信这会这么难。
这是我所拥有的:
<head>
<title>UP HERE WE ESCAPE THE RAT RACE</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
<script type="text/javascript">
swfobject.embedSWF("UpHere.swf", "myContent", "700", "300", "9.0.0");
function setFocusOnFlash() {
var fl = document.getElementById("myContent");
if (fl) { fl.focus(); }
}
</script>
</head>
<body onload="setFocusOnFlash()">
<div style="margin:0 auto; text-align:center; width:700px;">
<div id="myContent" style="margin:0 auto; text-align:center; width:700px;">
<p>Alternative content</p>
</div>
</div>
</body>
你可以在这里看到它,http://joon.be/exclusivepreview/
它出什么问题了?
我对 swfObject 没有很深的了解......
我找到了一种在 Firefox 16、Chrome 23 和 IE 8 上适用的方法(到目前为止我已经在这些版本上进行过测试)。当然,这是一堆黑客,所以谁知道它是否会永远有效……但这肯定不会让事情变得更糟。
function setFocusOnFlash() {
var flash = document.getElementById("theIdOfTheObjectElement");
flash.tabIndex = 1234; // This was needed on Chrome 23
flash.focus();
// Attention: FireFox needs wmode "opaque"!
}
仅在 Firefox 上,<param name="wmode" value="opaque">
在下面object
还需要元素,否则focus()
没有效果。 (我用过斯蒂芬·贝兰格的jquery.flash
,您可以在其中指定wmode
;我想这也是可能的SWFObject
.)
但更棘手的部分是你不能打电话setFocusOnFlash
太早了。对于 Chrome 和 IE,添加setTimeout(setFocusOnFlash, 1)
插入对象的 JavaScript 工作完成后立即执行。直接发行setFocusOnFlash()
没有。我认为技巧很简单,即仅在浏览器完全处理文档更改后才调用定时回调,而不管您指定的延迟如何。但在 Firefox 上,这么小的延迟调用还为时过早;它在周围放置了一个虚线边框object
元素(不应该)并且 Flash 没有获得击键。将延迟设置为 250 已在我的计算机上修复了此问题,但谁知道您需要多大的延迟。 (更糟糕的是,重复setFocusOnFlash
调用也没有帮助...一旦虚线边框出现,它们就没有进一步的效果。)所以,我所做的是添加一个ExternalInterface.call("flashLoaded")
回调到flash文档类构造函数。需要明确的是,您是在 Flash/ActionScript 中执行此操作,因此您需要访问 SWF 文件的源或作者。这样,当 SWF 启动时,它会调用flashLoaded
嵌入 HTML 页面的 JavaScript 方法,因此您知道它已准备就绪。该函数是这样的:
function flashLoaded() {
// Oddly, directly calling setFocusOnFlash() didn't work on IE8
setTimeout(setFocusOnFlash, 1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)