38

新しいタブで開くはずのリンクがありますが、タブがすでに開いている場合は、それに切り替えてください。私はjavascript、wnd = window.open()を試しましたが、wnd.focus()よりもChrome 19で機能しますが、FF13やIE9では機能しません。これが私が書いたコードです。

<script type="text/javascript">
var loadingTableWnd;
function openOrSwitchToWindow(url){
if(loadingTableWnd == undefined)
loadingTableWnd = window.open(url,'myFrame');
else
loadingTableWnd.focus();
}
</script> 
<a href='javascript:openOrSwitchToWindow("/");' >Loading Table</a>

すべてのブラウザを開いたり、すべてのブラウザから切り替えたりするにはどうすればよいですか?

編集:スタンドアロンウィンドウではなく、新しいタブでリンクを開く必要があります。

4

5 に答える 5

42

window.open()とfocus()のブラウザーの動作は異なります。このコードの場合window.open('www.sample.com','mywindow').focus()

  • Chrome 20は新しいタブを開き、focus()が呼び出されたかどうかに関係なく、後続のopen()呼び出しに焦点を合わせます。
  • Firefox 13は新しいタブを開き、最初のopen()に焦点を合わせ、その後のopen()呼び出しには焦点を合わせません/focus()を無視します。
  • IE 8は新しいウィンドウを開き、focus()を尊重します。
  • Safari 5は新しいウィンドウを開き、focus()が呼び出されたかどうかに関係なく、後続のopen()呼び出しに焦点を合わせます。

テストするフィドル:http://jsfiddle.net/jaraics/pEG3j/

于 2012-07-05T12:27:36.687 に答える
18

このようなロジックは必要ありません。デフォルトでは、の2番目のパラメータを指定するwindow.open()と、ブラウザが記憶する「名前」がウィンドウに付けられます。window.open()同じ名前で(すでに開いた後で)電話をかけようとしても、新しいウィンドウは開きません...ただし、電話をかける必要がある場合があります.focus()。これを試して:

var a = window.open(url, "name");
a.focus();

loadingTableWndこれらは関数内の唯一のコード行である必要があり、変数は必要ありません...

于 2012-06-11T17:39:06.670 に答える
9

ウィンドウがすでに開いていて、そのウィンドウに焦点を合わせたい場合は、次を使用できます。

window.open('', 'NameOfTheOpenedWindow').focus();
于 2015-06-10T14:11:16.617 に答える
2

window.focus()広くサポートされており、Internet ExplorerとFirefoxの両方で正常に機能しているようです。問題は、コードにあるはずです。テスト用の簡単なjsFiddleを作成しました。

于 2012-06-11T15:12:08.783 に答える
2

以前に開いたタブの状態を保持することに興味がない場合は、次のようにすることができます。

var loadingTableWnd;
function openOrSwitchToWindow(url) {
    if (loadingTableWnd != undefined) {
        loadingTableWnd.close();
    }
    loadingTableWnd = window.open(url,'myFrame');
}
于 2018-09-06T07:44:50.173 に答える