クリックイベントの後に新しいウィンドウを開き、safari、chromeで動作しません
-
10-10-2019 - |
質問
私はそうするように新しいウィンドウを開こうとしています:
$('#wrapper').click(function() {
window.setTimeout(function() {
//alert('hi');
window.open("http://example.com", "ExternalLinks", "resizable=yes, scrollbars=yes, status=yes");
}, 1000);
});
これはFirefoxで機能しますが、ChromeやSafariでは機能しません(これまでのところ、Macでテストしたばかりです)。 alert()
すべてのブラウザで動作するので、 window.open
Safari/Chromeでの実行から。さらに、削除した場合 setTimeout
そして、電話してください window.open
その後、3つのブラウザすべてで動作します。それはほとんどのようなものです window.open
からあまりにも離れてネストされています click
イベントでは、Safari/Chromeでは機能しません。
ご存知のように、私はすべてフラッシュのWebサイトを持っていて、新しいウィンドウで外部リンクを開くようにしようとしているので、URLのハッシュタグを読んでいます(ex。htp://example.com/# /Facebook/)そして、それが特定のアイテムに一致する場合、私は電話しています window.open
特定のURLを開くには。フラッシュソースにはアクセスできないか、そこでこれを処理します。
何か案は?
解決
Safari/Chromeには、これが機能しないように組み込まれたポップアップブロッカーがあります。 Safari/Chromeで新しいウィンドウを開くことが許可されている唯一のJavaScriptは、クリックハンドラー(およびその他の直接ユーザー入力ハンドラー)に直接接続されています。過去のバージョンでは、人々はチートするいくつかの方法を見つけました(他の要素(フォームまたはDIV)、JavaScriptを使用してユーザー入力をシミュレートするなど)が、これを検出することについては新しいバージョンがより賢いです。遅延したポップアップを使用しないように、物事を再構成することをお勧めします。これは、結局、ユーザーにとって一般的に耳障りなことです。
他のヒント
window.open()の返品値を確認して、未定義の場合は、これを回避しました。それが真の場合、ユーザーがポップアップブロッカーを無効にするためのメッセージを使用してarert()を呼び出します。
var myWin = window.open([args]);
if (myWin == undefined)
alert('Please disable your popup blocker');
別の回避策
受け入れてオプションをキャンセルしてポップアップを開き、window.openを添付するだけです。
Acceptボタンへのアクションとそれが機能します。それは私のために働いた...