7

別のブラウザー タブにいるときに、フォーカスを親ウィンドウに戻すにはどうすればよいですか? 私はもう試した:

window.opener.focus();

無駄に。ウィンドウがドッキングされていない場合にのみ機能するようです。

これは、Chrome、IE9/10、Firefox、および Safari で動作する必要があります。

Internet Explorer では、フォーカスを子ウィンドウに設定する際にも問題があるようです。例:使用時:

var windowRef = window.open(url);

その後、同じタブから:

windowRef.focus(); // ok in Chrome, doesn't seem to work in IE...
4

1 に答える 1

0

正確に何を達成したいですか?他のウィンドウ内のフォーカスを最初のリンク/ボタン/フォーム フィールドなどに設定するには? または、他のウィンドウ (ブラウザ タブ) をアクティブなブラウザ タブにするには?

とにかくopener.focus()、両方のウィンドウが同じオリジンから提供されていないため、呼び出しが機能しない可能性があります。これを解決するには、postMessageを介して通信チャネルを設定してみてください。したがって、openerドキュメントでは、次のようなイベントをリッスンします。

window.addEventListener('message', function (event) {
    window.focus();
}, false);

開いたウィンドウで、次のようなメッセージを送信します。

opener.postMessage('foo', '*');

残念ながら、これが現在機能しているかどうかをテストすることはできません。(そうすべきだとは思いますが…)

ただし、いくつか追加する必要があります。

  1. 一部の旧式のブラウザは、postMessage をサポートしていません ( caniuse.comを参照)。ただし、回避策はあります。:)
  2. イベント リスナーのアタッチには、W3 標準の表記法を使用しました。IE8 以下では、独自のattachEvent同等のものを使用します。
  3. '*'オリジン ワイルドカードを、オープナー ウィンドウの実際のオリジンに置き換える必要があります。
  4. メッセージ イベント リスナー関数では、event.origin を検査し、オリジンが正しい場合にのみ実際のペイロードを実行する必要があります。
于 2013-06-22T11:35:18.323 に答える