2011-08-14 19 views
8

ユーザーが表示中のページを離れずにTwitterで認証できるようにポップアップウィンドウを開こうとしています。このテクニックはWeb上で、特にDisqusのコメントアプリケーションで使用されています。しかし、私は「ポップアップウィンドウがブロックされました」というメッセージか、何も起こらないという2つの結果しか得られません。ポップアップウィンドウがajaxの成功ハンドラでブロックされました

私は、herehereと概説されているアプローチを試してみました。これをどうすれば解決できますか?

私のコードは、現在のようになります。

var windowSizeArray = [ "width=200,height=200", 
          "width=300,height=400,scrollbars=yes" ]; 
var url = $('.twitter_popup').attr("href"); 
var windowName = $('.twitter_popup').attr("name"); 
var windowSize = windowSizeArray[$('.twitter_popup').attr("rel")]; 
window.open(url, windowName, windowSize); 
+0

コードを掲載することはできますか? – ShankarSangoli

+0

ポップアップセキュリティモデルでは、ユーザーイベントによってトリガーされるポップアップのみが許可されます。クリックイベント。あなたがそれをしていることを確認するために、より多くの文脈を共有することはできますか? –

答えて

20

ブラウザのポップアップブロッカーは、コードはスクリプト実行コンテキストで実行されています。

例:アンカーで新しいウィンドウを開くと、ポップアップブロックがブロックされませんが、setTimeoutを使用して新しいウィンドウを開こうとすると、ポップアップブロッカーがこれをブロックします。なぜなら、タイムアウトに達すると、ユーザアクションの代わりにコンテキストがスクリプト実行コンテキストになっているからです。これは、ajaxコールバックハンドラで新しいウィンドウを開こうとするときと同じ動作です。

あなたはこのような状況に似ていると思います。 example

何らかの理由で、あなた自身が、あなたは同期AJAX呼び出しを行うことによって、それを達成することができますAJAX成功ハンドラでポップアップを開く場合ライブ

。ポップアップはブロックされません。

+0

これが問題でした。私はajax呼び出しの 'success'アクションでウィンドウを開いていました。私はウィンドウを開いて、代わりにウィンドウ内からajaxを実行することで修正しました。本当にありがとう! – providence

+1

実行コンテキストに言及するための+1 – Mrchief

+0

setTimeoutを使用して最新のクロムまたはFirefoxでポップアップがブロックされていない – Orbit

0

問題は、次の領域にあるかもしれません... 1. windowSizeArrayは、単一の要素が含まれています。 2.クラス名がセレクタとして使用されているため、コード$( '。twitter_popup')。attr( "rel")はexpectdよりもdiffの結果が出るかもしれません。

+0

windowSizeArrayは実際には2つの要素を含んでいます。 – Ryan

関連する問題