クリックイベントの後に新しいウィンドウを開き、safari、chromeで動作しません

StackOverflow https://stackoverflow.com/questions/4663861

質問

私はそうするように新しいウィンドウを開こうとしています:

$('#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ボタンへのアクションとそれが機能します。それは私のために働いた...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top