2011-10-27 6 views
5

私はこのテストページを私のフラッシュゲーム用にセットアップしようとしていましたが、負荷に重点を置くことを拒否しています。私はフォーラムのエントリの束を読んで、何もすることを得られなかった、私は本当にこれがとても難しいはずだとは思わない。ここで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についての深い知識はありません。

答えて

6

私はFirefox 16、Chrome 23、およびIE 8(これはこれまでのところテスト済みです)で私のために働く方法を見つけました。もちろん、これはハックの束なので、それが永遠に働くかどうかを知っています...しかし、それは事態を悪化させません。 Firefoxのオン

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()は効果がありませんでした。

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

function flashLoaded() { 
    // Oddly, directly calling setFocusOnFlash() didn't work on IE8 
    setTimeout(setFocusOnFlash, 1); 
} 
0

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

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

+0

これはChromeやその他のブラウザで行う方法はありますか?または自動焦点を合わせる方法はありますか? – joon

+0

これを行う方法があるかもしれませんが、私はまだそれを理解していません。 –

1

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

0

私は必死にちょうど私のゲームをテストするために、一つ一つの時間をクリックすることを避けるために自分のFlashゲームの開発をスピードアップするために、この仕事を得るために探していました。だから、私はそれがすべてのブラウザで動作するかどうかは気にしなかったので、ここではChrome上でのみ動作するものがあります。

<body onload='document.getElementById("haxe").focus();'> 
    <embed src="game.swf" id="haxe" ... 

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

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

関連する問題