1. ホーム
  2. javascript

[解決済み] Chrome、Javascript、window.open in new tabについて

2022-05-18 03:27:52

質問

クロームでは、新しいタブで開きます。

<button onclick="window.open('newpage.html', '_blank')" />

は新しいウィンドウで開きます(ただし、新しいタブでも開くようにしたい。

<script language="javascript">
  window.open('newpage.html', '_blank');
</script>

これは実現可能か?

どのように解決するのですか?

Internet Explorer のユーザーが制御するオプションであるため、直接制御することはできません。

別のウィンドウ名で Window.open を使用してページを開くと、ポップアップのように新しいブラウザ ウィンドウで開くか、ユーザーがそうするようにブラウザを構成した場合は新しいタブで開かれます。

EDIT。

より詳細な説明です。

1. モダンブラウザでは、window.openはポップアップではなく、新しいタブで開きます。

2. 第3パラメータにオプションを指定することで、ブラウザに新しいウィンドウ(「ポップアップ」)を使用させることができます。

3. window.openの呼び出しがユーザ主導のイベントの一部でなかった場合、新しいウィンドウで開くことになります。

4. ユーザが開始したイベント」は同じ関数呼び出しである必要はありませんが、ユーザがクリックした関数に起因するものである必要があります。

5. ユーザーが開始したイベントが関数呼び出しを委譲または延期した場合 (クリックイベントにバインドされていないイベントリスナーまたは委譲で、または setTimeout などで)、それは "ユーザーが開始した" というステータスを失います。

6. いくつかのポップアップブロッカーは、ユーザーが開始したイベントから開かれたウィンドウは許可しますが、それ以外で開かれたウィンドウは許可しません。

7. ポップアップがブロックされた場合、ブロッカーによって通常許可されているもの(ユーザが開始したイベントによる)もブロックされることがあります。 いくつかの例は...

新しいタブではなく、新しいブラウザ インスタンスでウィンドウを開くように強制する。

window.open('page.php', '', 'width=1000');

以下は、別の関数を呼び出しているにもかかわらず、ユーザが起動したイベントとして認定されます。

function o(){
  window.open('page.php');
}
$('button').addEvent('click', o);

setTimeoutがそれを延期するので、以下はユーザが開始したイベントとして適格ではないでしょう。

function g(){
  setTimeout(o, 1);
}
function o(){
  window.open('page.php');
}
$('button').addEvent('click', g);