ドロップダウンリストからページ名を選択して、ブラウザをそのページに転送できる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がこれを行わない理由を知っている人はいますか?
Safariは、非同期呼び出し内で行われるwindow.open()への呼び出しをブロックしています。
この問題に対する私が見つけた解決策は、asnyc呼び出しを行う前にwindow.openを呼び出し、約束が解決したときに場所を設定することです。
var windowReference = window.open();
myService.getUrl().then(function(url) {
windowReference.location = url;
});
サファリでwindow.open()を使用するには、要素のonclickイベント属性に配置する必要があります。
例:<button class='btn' onclick='window.open("https://www.google.com", "_blank");'>Open Google search</button>
2013年12月20日にスティーブによって受け入れられた回答のコメントから取られた:
実際には、非常に簡単な方法があります。iMac/ Safariブラウザの[ポップアップウィンドウをブロックする]をクリックするだけで、希望どおりに実行されます。
明確にするために、Mac OS X El CapitanでSafariを実行する場合:
Safariの[タブ]には、_Open pages in tabs instead of windows:
_というラベルが付いた設定があり、いくつかのオプションがあります。私はあなたのものがAlways
に設定されるかもしれないと思っています。結論として、ブラウザーが新しいウィンドウを開くことに頼ることはできません。
window.location.assign(url)
これはiOSデバイスのwindow.open(url)
の問題を修正します