首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让我的flash对象在加载时获得焦点?

如何让我的flash对象在加载时获得焦点?
EN

Stack Overflow用户
提问于 2011-10-28 04:04:58
回答 4查看 6.6K关注 0票数 5

我一直试图为我的flash游戏设置这个测试页面,但它拒绝在加载上获得关注。我读了一大堆论坛的文章,却什么也没做,我真的不敢相信这会这么难。

这就是我所拥有的:

代码语言:javascript
复制
  <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的了解不是很深...

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-03 06:49:06

我已经找到了一种在Firefox 16、Chrome 23和IE 8上工作的方法(到目前为止,我已经在这些地方测试过了)。当然,这是一堆技巧,所以谁知道它是否会永远有效呢……但这肯定不会让事情变得更糟。

代码语言:javascript
复制
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方法,这样您就知道它已经准备好了。函数如下所示:

代码语言:javascript
复制
function flashLoaded() {
    // Oddly, directly calling setFocusOnFlash() didn't work on IE8
    setTimeout(setFocusOnFlash, 1);
}
票数 6
EN

Stack Overflow用户

发布于 2012-07-12 15:10:16

这样做的方法是使用ExternalInterface,并在选项卡事件上使用JS侦听器将焦点发送到Flash (即,当选项卡从Flash之前的元素移开时)。在实践中,这很难,AS中的stage.focus处理需要处理一些,呃,怪癖。但是它确实可以跨浏览器工作。

票数 1
EN

Stack Overflow用户

发布于 2015-04-12 23:18:10

我拼命地寻找这项工作,只是为了加快我自己的Flash游戏开发速度,避免每次都要点击来测试我的游戏。所以我并不关心它是否在所有的浏览器上都能工作,所以这里有一个只能在Chrome上工作的。

代码语言:javascript
复制
<body onload='document.getElementById("haxe").focus();'>
    <embed src="game.swf" id="haxe" ...

如果您以前尝试过(),但它对您不起作用,请注意,您必须只使用对象嵌入标记,而不是对象和参数版本。

在Chrome版本40.0.2214.93 (64位)上测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7921690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档