我一直试图为我的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的了解不是很深...
发布于 2012-12-03 06:49:06
我已经找到了一种在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"!
}仅在火狐上,object元素下的<param name="wmode" value="opaque">也是必需的,否则focus()将不起作用。(我使用过Stephen Belanger的jquery.flash,您可以在其中指定wmode;我假设SWFObject也可以。)
但更棘手的部分是,您不能过早调用setFocusOnFlash。对于Chrome和IE,在插入对象的JavaScript后面直接添加setTimeout(setFocusOnFlash, 1)是有效的。直接发出setFocusOnFlash()并非如此,我假设诀窍只是在浏览器完全处理完文档更改之后才调用计时回调,而不管您指定的延迟有多长。但在火狐上,调用这个小延迟还为时过早;它在object元素周围设置了一个虚线边框(不应该是这样的),Flash没有得到按键。将延迟设置为250已经在我的电脑上解决了这个问题,但谁知道你需要多大的延迟。(更糟糕的是,重复setFocusOnFlash调用也没有帮助...一旦虚线边界存在,它们就不会产生进一步的影响。)因此,我所做的是向flash文档类构造函数添加一个ExternalInterface.call("flashLoaded")回调函数。需要说明的是,您是在Flash/ActionScript中执行此操作的,因此您需要访问SWF文件的源或作者。这样,当SWF启动时,它会调用嵌入的HTML页面的flashLoaded JavaScript方法,这样您就知道它已经准备好了。函数如下所示:
function flashLoaded() {
// Oddly, directly calling setFocusOnFlash() didn't work on IE8
setTimeout(setFocusOnFlash, 1);
}发布于 2012-07-12 15:10:16
这样做的方法是使用ExternalInterface,并在选项卡事件上使用JS侦听器将焦点发送到Flash (即,当选项卡从Flash之前的元素移开时)。在实践中,这很难,AS中的stage.focus处理需要处理一些,呃,怪癖。但是它确实可以跨浏览器工作。
发布于 2015-04-12 23:18:10
我拼命地寻找这项工作,只是为了加快我自己的Flash游戏开发速度,避免每次都要点击来测试我的游戏。所以我并不关心它是否在所有的浏览器上都能工作,所以这里有一个只能在Chrome上工作的。
<body onload='document.getElementById("haxe").focus();'>
<embed src="game.swf" id="haxe" ...如果您以前尝试过(),但它对您不起作用,请注意,您必须只使用对象嵌入标记,而不是对象和参数版本。
在Chrome版本40.0.2214.93 (64位)上测试。
https://stackoverflow.com/questions/7921690
复制相似问题