2011-08-14 78 views
8

我試圖打開一個彈出窗口,允許用戶使用twitter進行身份驗證,而不必離開他們正在查看的頁面。我已經看到了在網絡上使用這種技術,特別是Disqus評論應用程序。但是,我只能得到兩個結果,一個是「彈出窗口阻塞」消息或甚至沒有發生任何事情。在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調用實現它。彈出窗口不會被阻止。

+0

這是問題所在。我在ajax調用的'成功'行動中打開了窗口。我通過打開窗口並從窗口內執行ajax來修復它。謝謝一堆! – providence

+1

+1提及執行上下文 – Mrchief

+0

彈出並未在最新的chrome或firefox中使用setTimeout阻止 – Orbit

0

問題可能在於以下幾個方面...... 1. windowSizeArray只包含一個元素。 2.代碼$('。twitter_popup')。attr(「rel」)可能會給您一些比預期的差異結果,因爲類名稱用作選擇器

+0

windowSizeArray實際上包含2個元素,仔細觀察。 – Ryan

相關問題