2012-01-20 21 views
15

Actualmente estoy desarrollando una aplicación web en la que necesito abrir una ventana emergente para mostrar un informe. El problema es que algunas versiones de explorer no admiten la función javascript window.open, así que cuando este es el caso, capto el error y abro la nueva url con location.href. Aquí el código:Cómo utilizar el destino en location.href

try { 
    window.open(url, "","width=1002,height=700,location=0,menubar=0,scrollbars=1,status=1,resizable=0") 
} catch(e) { 
    location.target = "_blank"; 
    location.href = url; 
} 

El problema es que el location.target no está funcionando y me gustaría saber si hay una forma de especificar el objetivo de la location.href por lo que se puede abrir en una nueva lengüeta.

Respuesta

12

El problema es que algunas versiones del explorador no son compatibles con la función window.open Javascript

¿Qué dijo? ¿Puedes proporcionar una referencia para esa declaración? Con respeto, creo que debes estar equivocado. This works en IE6 e IE9, por ejemplo.

La mayoría de los navegadores modernos no permiten que su código use window.open excepto en respuesta directa a un evento de usuario, para mantener las ventanas emergentes de spam y tales a raya; tal vez eso es lo que estás pensando. Siempre que solo use window.open al responder a un evento de usuario, debería estar bien usando window.open   — con todas las versiones de IE. No se puede utilizar location para abrir una nueva ventana. Solo window.open o, por supuesto, el usuario haciendo clic en un enlace con target="_blank".

0

¿Por qué no tener una etiqueta de anclaje escondida en la página con el objetivo configurado como lo necesita, y luego simular haciendo clic en él cuando necesita el pop out?

How can I simulate a click to an anchor tag?

Esto funcionaría en los casos en que el window.open no funcionaba

+0

Hoy no, pero he usado esta técnica en el pasado – box86rowh

+0

Tengo que decir que no lo estoy comprando. ¿Harías una demostración? ¿De esto funciona, en los navegadores modernos, sin un evento de usuario? –

+0

http://jsfiddle.net/BHpMP/ – box86rowh

24

intente éste, que simula un clic en un ancla.

var a = document.createElement('a'); 
a.href='http://www.google.com'; 
a.target = '_blank'; 
document.body.appendChild(a); 
a.click(); 
+1

¿Lo has probado? No funciona en Chrome, al menos. –

+0

@ T.J.Crowder Publiqué esta respuesta después de probarla en jsfiddle: http://jsfiddle.net/XLLEk/ y está trabajando en mi máquina. Probablemente evitó todas las ventanas emergentes en su navegador, por eso no funciona en su caso. Si es así, considere eliminar el voto negativo, gracias. – qiao

+1

qiao: No sabe quién rechazó su respuesta. Ya sabes, lo comenté y conoces a alguien votado negativamente. Eso es todo lo que sabes; hacer suposiciones basadas en eso es una mala idea. En cuanto a la respuesta: usando la configuración predeterminada en Chrome, IE9 y Firefox, los tres bloquean la ventana emergente. Adecuadamente. Por lo tanto, no ofrece nada sobre 'window.open'. –

2

Si está utilizando un <a/> para desencadenar el informe, puede intentar este enfoque. En lugar de intentar generar una nueva ventana cuando window.open() falla, realice el escenario predeterminado para abrir una nueva ventana a través de target (y evítelo si window.open() tiene éxito).

HTML

<a href="http://my/url" target="_blank" id="myLink">Link</a> 

JS

var spawn = function (e) { 
    try { 
     window.open(this.href, "","width=1002,height=700,location=0,menubar=0,scrollbars=1,status=1,resizable=0") 
     e.preventDefault(); // Or: return false; 
    } catch(e) { 
    // Allow the default event handler to take place 
    } 
} 

document.getElementById("myLink").onclick = spawn; 
+0

Demostración: http://jsfiddle.net/cheeken/pAGjF/ – cheeken

3

Usted podría intentar esto:

 <script type="text/javascript"> 
     function newWindow(url){ 
       window.open(url); 
      } 
     </script> 

Y llamar a la función

+1

No funciona en Chrome – Susan

0

A partir de 2014, se puede activar el clic en a <a/> etiqueta. Sin embargo, por razones de seguridad, debe hacerlo en un controlador de eventos click, o el navegador lo etiquetará como una ventana emergente (algunos otros eventos pueden permitirle activar la apertura de manera segura).

jsFiddle

9

Se puede utilizar esta en cualquier elemento donde onclick funciona:

onclick="window.open('some.htm','_blank');"

+0

La pregunta no es cómo establecer un controlador, sino cómo establecer programáticamente el 'objetivo 'de un enlace. Tu publicación no responde esa pregunta. – amon

+0

Esta publicación en particular me fue bastante útil con un pinch +1. – ProfVersaggi

0
<a href="url" target="_blank"> <input type="button" value="fake button" /> </a> 
3

Si vas con la solución por @qiao, tal vez habría que desee quitar el apéndice niño ya que la pestaña permanece abierta y los clics posteriores agregarían más elementos al DOM.

// Code by @qiao 
var a = document.createElement('a') 
a.href = 'http://www.google.com' 
a.target = '_blank' 
document.body.appendChild(a) 
a.click() 
// Added code 
document.body.removeChild(a) 

Tal vez alguien podría publicar un comentario en su publicación, porque no puedo.

+0

¡Funciona como un encanto! (con punto y coma después de cada comando, obviamente) –

Cuestiones relacionadas