web-dev-qa-db-ja.com

window.open(url、 '_blank'); iMac / Safariで動作しない

ドロップダウンリストからページ名を選択して、ブラウザをそのページに転送できるWebページを作成しました。転送を行うコードは

if (url){
    window.open(url, '_blank');
} 

ここで、「url」は選択されたページです。

Window.open行の直前のコンソールログには、次のように出力されます。

    executing: window.open(http://www.mywebsite.com/44/threats.html, '_blank')

その後、ブラウザは新しいタブでページを開きます。

これは、Windows 7でSafariを含むすべてのブラウザーで正常に機能します。

IMacではFirefoxで動作しますが、Safariでは動作しません。

IMac/Safariがこれを行わない理由を知っている人はいますか?

41
Steve

Safariは、非同期呼び出し内で行われるwindow.open()への呼び出しをブロックしています。

この問題に対する私が見つけた解決策は、asnyc呼び出しを行う前にwindow.openを呼び出し、約束が解決したときに場所を設定することです。

var windowReference = window.open();

myService.getUrl().then(function(url) {
     windowReference.location = url;
});
109
Jeff Victorino

サファリでwindow.open()を使用するには、要素のonclickイベント属性に配置する必要があります。

例:<button class='btn' onclick='window.open("https://www.google.com", "_blank");'>Open Google search</button>

19
user2704238

2013年12月20日にスティーブによって受け入れられた回答のコメントから取られた:

実際には、非常に簡単な方法があります。iMac/ Safariブラウザの[ポップアップウィンドウをブロックする]をクリックするだけで、希望どおりに実行されます。

明確にするために、Mac OS X El CapitanでSafariを実行する場合:

  1. Safari->設定
  2. セキュリティ->「ポップアップウィンドウをブロックする」のチェックを外します
15
jnrcorp

Safariの[タブ]には、_Open pages in tabs instead of windows:_というラベルが付いた設定があり、いくつかのオプションがあります。私はあなたのものがAlwaysに設定されるかもしれないと思っています。結論として、ブラウザーが新しいウィンドウを開くことに頼ることはできません。

2
Bill Criswell

window.location.assign(url)これはiOSデバイスのwindow.open(url)の問題を修正します

0
sama vamsi