2011-01-11 158 views
11

我試圖打開一個新的窗口,像這樣:打開新窗口,鍍鉻

$('#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()適用於所有瀏覽器,所以似乎有某些東西阻止在Safari/Chrome中執行window.open。此外,如果我刪除了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有默認打開和打開這些嚴格的彈出窗口攔截器,並不是其他瀏覽器沒有它們 - 這只是爲其他瀏覽器它們要麼是加載項,要麼不是在安裝時自動打開的。 – 2011-01-12 16:46:38

7

我通過檢查未定義的window.open()的返回值來解決這個問題。如果這是真的,則調用alert()並向用戶發送消息以禁用其彈出窗口阻止程序。

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

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

有用的回覆。謝謝。 – matthewpavkov 2014-02-06 01:50:08

0

另一個解決方法
只要打開與接受並取消選項,並附加window.open
行動,接受按鈕,它會工作的彈出。它爲我工作...