2011-01-11 9 views
11

Estoy intentando abrir una nueva ventana de este modo:Abre nueva ventana después de un evento de clic no funciona en Safari, Chrome

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

Esto funciona en Firefox, pero no en Chrome o Safari (hasta ahora, Acabo de probar en una Mac). El alert() funciona en todos los navegadores, por lo que parece haber algo que impide que el window.open se ejecute en Safari/Chrome. Además, si elimino el setTimeout y solo llamo al window.open, entonces funciona en los 3 navegadores. Es casi como si el window.open está anidado demasiado lejos del evento click, entonces no funciona en Safari/Chrome.

Así que ya sabes, tengo un sitio web totalmente Flash y estoy tratando de obtener enlaces externos para abrir en una nueva ventana, así que estoy leyendo la etiqueta hash en la URL (por ejemplo, htp: // example .com/#/facebook /) y si coincide con ciertos elementos, entonces llamo al window.open para abrir una URL específica. No tengo acceso a la fuente Flash, o podría manejar esto allí.

¿Alguna idea?

Respuesta

14

Safari/Chrome tienen bloqueadores de pop-up incorporados que impiden que funcione. El único javascript que tiene permiso para abrir una nueva ventana en Safari/Chrome es javascript directamente asociado a los manejadores de clics (y otros manejadores de entrada directos de usuario). En versiones pasadas las personas descubrieron algunas formas de hacer trampa (como generar algún otro elemento, una forma o div, y simular la entrada del usuario con javascript), pero las versiones más nuevas son más inteligentes para detectar esto. Recomiendo reconfigurar las cosas para que no utilices una ventana emergente retrasada: ese es el tipo de cosas que, en general, pueden ser discordantes para un usuario después de todo.

+1

También vale la pena señalar que, si bien Safari y Chrome tienen estos bloqueadores de popup estrictos incorporados y activados de forma predeterminada, no es que otros navegadores no los tengan, es solo eso para otros navegadores son complementos o no se encienden automáticamente en el momento de la instalación. –

7

Lo solucioné comprobando el valor de retorno de window.open() para undefined. Si eso es cierto, llame a alert() con un mensaje para que el usuario desactive su bloqueador de pop-ups.

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

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

Respuesta útil. Gracias. – matthewpavkov

0

Otra solución
Sólo tiene que abrir una ventana emergente con opciones de Aceptar y Cancelar y adjuntar la acción window.open
al botón de aceptar y lo hará obras. Me funcionó ...

Cuestiones relacionadas