私は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);
}