8

ページが読み込まれたときにフォーカスを要求するために、次の JavaScript が呼び出されています。

このコードは Firefox と IE7 では 100% 正常に動作しますが、Chrome と Safari ではフォーカスがまったく移動しないようです。すべてのブラウザで動作させるにはどうすればよいですか?

 document.getElementById("MyFlashFile").focus();
4

5 に答える 5

16

インターネットを検索するのに何時間もかかりましたが、最終的に最新バージョンの IE、Firefox、Chrome、および Safari で動作するソリューションを見つけました。次のコードは、問題を完全に解決します。

<head>
  <script type="text/javascript" src="swfobject.js"></script>
  <script>
    function setFocusOnFlash() {
      var f=swfobject.getObjectById('myFlashObjectId');
      if (f) { f.tabIndex = 0; f.focus(); }
    }
  </script>
</head>
<body onload="setFocusOnFlash()">

この例では、フラッシュが SWFObject ライブラリを使用して埋め込まれていることを前提としています。そうでない場合は、f 変数を、Flash ムービーを保持する Object または Embed タグに設定する必要があります。

2012 年 5 月 5 日に編集: 残念ながらtabIndex、ブラウザー (Chrome/Safari) とオペレーティング システムのすべての組み合わせで回避策が機能しなくなったようです。たとえば、現在、Windows 上の Chrome 18 は失敗します。

Christian Junkが提供する以下のリンクを参照して、問題の解決状況を確認してください。

于 2010-09-15T14:24:42.567 に答える
4

残念ながら、すべてのブラウザで機能するフラッシュファイルにフォーカスを設定できることを確認する方法はありません。IEとFirefoxは(ほとんどの場合)この問題を解決しましたが、ChromeとSafariはどちらも解決策のないWebkitに基づいています。

YouTubeやその他のビデオ/フラッシュサイトで最初に目にするのは、プレーヤーをクリックするように誘うものであることに気付いた場合、それはこの問題が原因です。

ある開発者は巧妙な回避策を考え出しましたが、FlashファイルにActionScriptを追加する必要があります。これは、汎用プレーヤーを構築している場合、お尻の痛みになる可能性があります。

Gary Bishop:FirefoxFlashの愚かさを修正

別の種類の解決策は、wmodeを不透明に設定することです。これは状況によっては機能すると聞きましたが、テキスト領域でカーソルが台無しになります。私もこれであまり運がなかったが、あなたはそれを試してみることができる。

フォーカスなしのバグの詳細については、bugzillaを参照してください。

于 2009-02-28T01:04:10.803 に答える
4

Chrome にバグがあるようです。

「window.document.getElementById('swfID').focus() が Flash オブジェクトに対して機能しない」

http://code.google.com/p/chromium/issues/detail?id=27868

回避策を見つけようとしましたが、見つけることができませんでした;(

よろしく、クリスチャン

于 2010-02-09T18:32:47.233 に答える
1

Cláudio Silva answer に加えて、設定する必要がありますwmode="opaque"

于 2011-05-15T23:31:28.273 に答える
0

ページ全体がレンダリングされた後に、このコードが呼び出されていることを確認してください。おそらく、それが参照する HTML の上で呼び出されているため、要素はまだ存在しません。

さまざまな JavaScript フレームワークには、 DOM の準備が整ったことを知らせるユーティリティがあります。

于 2009-02-27T14:53:01.787 に答える