2011-01-11 12 views
11

Sto cercando di aprire una nuova finestra in questo modo:Aprire una nuova finestra dopo un evento click non funziona in Safari, Chrome

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

Questo funziona in Firefox, ma non in Chrome o Safari (finora, Ho appena provato su un Mac). Il alert() funziona in tutti i browser, quindi sembra esserci qualcosa che impedisce l'esecuzione di window.open in Safari/Chrome. Inoltre, se rimuovo lo setTimeout e chiamo semplicemente il window.open, allora funziona su tutti e 3 i browser. È quasi come se lo window.open sia nidificato troppo lontano dall'evento click, quindi non funziona in Safari/Chrome.

Quindi, sai, ho un sito Web all-Flash e sto cercando di aprire i link esterni in una nuova finestra, quindi sto leggendo il tag dell'hash nell'URL (ad esempio esempio: htp: // .com/#/facebook /) e se corrisponde a determinati elementi, quindi sto chiamando window.open per aprire un URL specifico. Non ho accesso alla sorgente Flash, altrimenti potrei gestirlo lì.

Qualche idea?

risposta

14

Safari/Chrome sono dotati di blocchi per il pop-up integrati che impediscono il corretto funzionamento. L'unico javascript che è autorizzato ad aprire una nuova finestra in Safari/Chrome è javascript direttamente collegato ai gestori di clic (e ad altri gestori di input utente diretti). Nelle passate versioni le persone hanno escogitato alcuni modi per imbrogliare (come generare qualche altro elemento - una forma o un div - e simulare l'input dell'utente con javascript), ma le versioni più recenti sono più intelligenti nel rilevare questo. Consiglierei di riconfigurare le cose in modo da non usare un pop-up ritardato - questo è il genere di cose che in genere possono essere irritanti per un utente, dopo tutto.

+1

Vale anche la pena notare che, mentre Safari e Chrome hanno questi rigidi popup bloccati integrati e attivati ​​di default, non è che gli altri browser non li abbiano: è solo per altri browser sono add-on o non si accendono automaticamente al momento dell'installazione. –

7

Ho risolto questo problema controllando il valore restituito da window.open() per undefined. Se questo è vero avviso di chiamata() con un messaggio per l'utente per disabilitare il blocco dei popup.

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

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

Risposta utile. Grazie. – matthewpavkov

0

Un'altra soluzione
Basta aprire un popup con accettare e Cancella Possibilità e fissare l'azione window.open
al pulsante ACCETTA E sarà opere. Ha funzionato per me ...

Problemi correlati