Html 如何使我的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/

我一直在尝试为我的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>

在这里,我们逃避了激烈的竞争
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不是你认为应该/可以做到的吗?也许有一种方法可以做到,但我肯定还没有找到。