Html 如何使我的flash对象在加载时获得焦点?
我一直在尝试为我的flash游戏设置这个测试页面,但它拒绝关注负载。我读了一堆论坛的文章,却什么也没做,我真不敢相信这会这么难 以下是我所拥有的:Html 如何使我的flash对象在加载时获得焦点?,html,flash,Html,Flash,我一直在尝试为我的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/
<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>
在这里,我们逃避了激烈的竞争
swfobject.embedSWF(“支持swf”、“myContent”、“700”、“300”、“9.0.0”);
函数setFocusOnFlash(){
var fl=document.getElementById(“myContent”);
if(fl){fl.focus();}
}
替代内容
你可以在这里看到它,
怎么了?
我对swfObject没有很深的了解…您使用的方法只适用于Internet Explorer-这是flash使用方式的一个限制
实现这一点的方法是使用ExternalInterface,并在选项卡事件上使用JS侦听器将焦点发送到Flash(即,当选项卡在Flash之前离开元素时)。在实践中,这是很困难的,舞台上的焦点处理需要处理一些,呃,怪癖。但它确实可以跨浏览器运行我找到了一种在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上,还需要对象下的
元素,否则focus()
没有效果。(我使用了Stephen Belanger的jquery.flash
,您可以在其中指定wmode
;我假设使用SWFObject
也可以)
但更棘手的是,您不能过早调用setFocusOnFlash
。对于Chrome和IE,直接在插入对象的JavaScript工作后添加setTimeout(setFocusOnFlash,1)
。直接发出setFocusOnFlash()
没有。我假设技巧很简单,定时回调仅在浏览器完全处理文档更改后调用,而不管您指定的延迟。但是在Firefox上,这么小的延迟太早了;它在对象
元素周围放置了一个虚线边框(它不应该这样做),而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);
}
我拼命地想得到这份工作,只是为了加快我自己的Flash游戏开发速度,避免每次都要点击来测试我的游戏。所以我不在乎它是否适用于所有浏览器,所以这里有一个只适用于Chrome
<body onload='document.getElementById("haxe").focus();'>
<embed src="game.swf" id="haxe" ...
在Chrome和其他浏览器上有什么方法可以做到这一点,或者自动聚焦flash不是你认为应该/可以做到的吗?也许有一种方法可以做到,但我肯定还没有找到。