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;">
      

Alternative content

</div> </div> </body>

You can see it live here, http://joon.be/exclusivepreview/

どうしたんだ? 私はswfObjectの非常に深い知識を持っていない...

5

4 答え

私は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では、 object 要素の下にある も必要でした。 >効果がなかった。 (私は wmode を指定できるStephen Belangerの jquery.flash を使用していましたが、 SWFObject

しかし、難しいのは、 setFocusOnFlash をあまりに早く呼び出さないことです。 ChromeとIEの場合、オブジェクトを挿入するJavaScriptの直後に setTimeout(setFocusOnFlash、1)を追加しています。直接 setFocusOnFlash()を発行しませんでした。私は、あなたが指定した遅延にかかわらず、ブラウザーが文書の変更を完全に処理した後にのみ、タイムド・コールバックが呼び出されるという単純なことだと思います。しかし、この小さな遅れで呼び出すFirefoxでは早すぎた。 object 要素の周りに点線の境界線を置いていて、Flashはキーストロークを取得しませんでした。遅延を250に設定すると、これは私のコンピュータ上で修正されましたが、どれだけ大きな遅延が必要かを知っています。 (もっと悪いことに、 setFocusOnFlash の呼び出しを繰り返すことは助けになりませんでした...その点線のボーダーがあったら、それ以上の効果はありませんでした)。 Flash ドキュメントクラスコンストラクタへのコールバック( "flashLoaded")コールバック。明確にするには、Flash/ActionScriptでそれを行います。したがって、SWFファイルのソースまたは作成者にアクセスする必要があります。このようにして、SWFが起動すると、埋め込みHTMLページの flashLoaded JavaScriptメソッドが呼び出され、準備が整ったことがわかります。機能は次のようでした:

function flashLoaded() {
   //Oddly, directly calling setFocusOnFlash() didn't work on IE8
    setTimeout(setFocusOnFlash, 1);
}
6
追加された

私は自分のゲームをテストするたびにクリックするのを避けるために、私自身のFlashゲーム開発をスピードアップするために、この作業をすることを切望していました。だから、私はそれがすべてのブラウザで動作するかどうかは気にしなかったので、ここではChrome上でのみ動作するものがあります。

<body onload='document.getElementById("haxe").focus();'>
    

前にfocus()を試してもうまく動作しなかった場合は、オブジェクトとparamのバージョンではなく埋め込みタグだけを使用する必要があることに注意してください。

Chromeバージョン40.0.2214.93(64ビット版)でテスト済みです。

1
追加された

これを行う方法は、ExternalInterfaceを使用して、タブイベントでJSリスナーを使用してFlashにフォーカスを送信することです(つまり、タブがFlashの前に要素から離れて移動するため)。実際には難しく、あなたのASでのstage.focusの扱いは、いくつかの、ermの癖に対処する必要があります。しかし、それはかなりクロスブラウザーを動作させる

1
追加された

使用している方法はInternet Explorerでのみ機能します。これは、フラッシュの使用方法の制限です。

http://kb2.adobe.com/cps/155/tn_15586.html

0
追加された
Chromeやその他のブラウザでこれを行う方法はありますか?または、自動焦点を合わせるフラッシュは、あなたがするべきではないと思いますか?
追加された 著者 joon,
それを行う方法があるかもしれませんが、私はまだそれを理解していません。
追加された 著者 Justin Beckwith,