javascript macos safari

javascript - window.open(url, ''_blank''); no funciona en iMac/Safari



macos (5)

Hay una configuración en Safari en "Pestañas" que etiquetó Open pages in tabs instead of windows: con un menú desplegable con algunas opciones. Estoy pensando que el tuyo puede estar configurado para Always . En pocas palabras, no puede confiar en que un navegador abra una nueva ventana.

Construí una página web que te permite seleccionar un nombre de página de una lista desplegable y luego transfiere el navegador a esa página. El código que hace la transferencia es

if (url){ window.open(url, ''_blank''); }

donde "url" es la página seleccionada.

Un registro de consola justo antes de la línea window.open imprime algo como:

executing: window.open(http://www.mywebsite.com/44/threats.html, ''_blank'')

y luego los navegadores abren la página en una nueva pestaña.

Esto funciona bien en Windows 7 para todos los navegadores, incluido Safari.

En un iMac funciona para Firefox pero no para Safari.

¿Alguien sabe por qué iMac / Safari no hará esto?


La sintaxis correcta es window.open(URL,WindowTitle,''_blank'') Todos los argumentos abiertos deben ser cadenas. No son obligatorios, y se puede quitar la ventana. Entonces, newWin=open() funciona, si planeas poblar newWin.document por ti mismo. PERO DEBES usar los tres argumentos, y el tercero se establece en ''_blank'' para abrir una nueva ventana verdadera y no una pestaña.


Para usar window.open () en safari debe colocarlo en el atributo de evento onclick de un elemento.

Por ejemplo: <div class=''btn'' onclick=''window.open("https://www.google.com", "_blank");''>Open google search</div>


Safari está bloqueando cualquier llamada a window.open () que se realiza dentro de una llamada asíncrona.

La solución que encontré para este problema es llamar a window.open antes de hacer una llamada asnyc y establecer la ubicación cuando se resuelva la promesa.

var windowReference = window.open(); myService.getUrl().then(function(url) { windowReference.location = url; });


Tomado del comentario de las respuestas aceptadas por Steve el 20 de diciembre de 2013:

En realidad, hay una forma muy sencilla de hacerlo: simplemente haga clic en "Bloquear ventanas emergentes" en el navegador iMac / Safari y hará lo que yo quiera.

Para aclarar, al ejecutar Safari en Mac OS X El Capitan:

  1. Safari -> Preferencias
  2. Seguridad -> Desmarque ''Bloquear ventanas emergentes''