2011-01-11 17 views
11

オープンクリックイベントがSafariで動作していない後、新しいウィンドウ、クローム

$('#wrapper').click(function() { 
    window.setTimeout(function() { 
     //alert('hi'); 
     window.open("http://example.com", "ExternalLinks", "resizable=yes, scrollbars=yes, status=yes"); 
    }, 1000); 
}); 

これは、これまで(Firefoxではなく、クロムまたはSafariで動作します私はちょうどMacでテストした)。 alert()はすべてのブラウザで動作しますので、window.openがSafari/Chromeで実行されないようになっているようです。さらに、setTimeoutを削除してwindow.openを呼び出すと、3つのすべてのブラウザで機能します。 window.openclickイベントから離れすぎてネストされている場合はほぼ同じですが、Safari/Chromeでは機能しません。

私はオールフラッシュのウェブサイトを持っており、新しいウィンドウで開く外部リンクを取得しようとしているので、URLのハッシュタグ(例:htp:// example .com /#/ facebook /)、特定のアイテムと一致する場合は、window.openを呼び出して特定のURLを開きます。私はFlashソースへのアクセス権がありません。または、私はそこでこれを処理します。

アイデア?

答えて

14

Safari/Chromeには、これが動作しないようにするポップアップブロッカーが組み込まれています。 Safari/Chromeで新しいウィンドウを開くことができる唯一のjavascriptは、クリックハンドラー(および他の直接ユーザー入力ハンドラー)に直接接続されたjavascriptです。以前のバージョンでは、人々はチート(いくつかの他の要素(フォームまたはdiv)を生成し、ユーザー入力をjavascriptでシミュレートするなど)をいくつか考え出しましたが、新しいバージョンではこれを検出することがよりスマートになりました。遅れたポップアップを使用しないように設定を変更することをお勧めします。これは、一般的にユーザーに不快感を与えることのある種類のものです。

+1

SafariとChromeには、これらの厳しいポップアップブロッカーが組み込まれており、デフォルトでオンになっていますが、他のブラウザにはそれらがないわけではありません。他のブラウザインストール時にアドオンまたは自動的にオンにされません。 –

7

私はwindow.open()の戻り値を未定義にチェックしてこの問題を回避しました。それが本当であれば、ポップアップブロッカーを無効にするためのメッセージをalert()に呼び出します。

var myWin = window.open([args]); 

if (myWin == undefined) 
    alert('Please disable your popup blocker'); 
+1

便利なレスポンス。ありがとう。 – matthewpavkov

0

別の回避策
だけで動作しますACCEPTやCANCELオプションを使用してポップアップを開き、ACCEPTボタンにwindow.open
アクションを添付して。それは私のために働いた...

関連する問題