ie8 var w = window.open () - "Mensaje: Argumento no válido".

113

Tengo un sitio que tiene un problema solo con IE8:

El codigo es:

var w = window.open(urlstring, wname, wfeatures, 'false');

El error es:

Mensaje: argumento no válido.
Línea: 419 Char: 5
Código: 0
URI: http: //HOSTNAME/js_context.js

He confirmado el número de línea del código (la "Línea" y el "URI" son correctos) y entiendo que en versiones posteriores de IE8, esto se considera correcto.

He verificado todos los parámetros entrantes en la llamada volcando alertas, y todos parecen válidos.

Este problema no ocurre en FF (probablemente 3).

ACTUALIZAR:

El problema parece estar en usar la asignación del resultado de window.open () al hacer "var w". Cuando divido la línea en dos declaraciones, funciona en IE8.

ACTUALIZACIÓN2:

Residencia en:

http://javascript.crockford.com/code.html

Cuando una función debe invocarse inmediatamente, toda la expresión de invocación debe estar envuelta en parens para que quede claro que el valor que se produce es el resultado de la función y no la función en sí.

Esto no es exactamente lo que está sucediendo aquí, pero descubrí que aplicar el principio resolvió el problema, en el modo de compatibilidad de IE8.

var w = (window.open(urlstring, wname, wfeatures, false));
benc
fuente
Tuve el mismo problema y la publicación de David es la mejor respuesta. Gracias por tu publicación y por la ayuda de David.
Ervin

Respuestas:

251

Esta es una publicación antigua, pero tal vez aún sea útil para alguien.

Tuve el mismo mensaje de error. Al final, el problema fue un nombre no válido para el segundo argumento, es decir, tenía una línea como:

   window.open('/somefile.html', 'a window title', 'width=300');

El problema era "un título de ventana", ya que no es válido. Funcionó bien con la siguiente línea:

   window.open('/somefile.html', '', 'width=300');

De hecho, leyendo con atención me di cuenta de que Microsoft no admite un namesegundo argumento. Cuando miras la página de documentación oficial , ves que Microsoft solo permite los siguientes argumentos, si es que usas ese argumento:

  • _blanco
  • _medios de comunicación
  • _padre
  • _buscar
  • _yo
  • _parte superior
Stefan
fuente
1
Creo que me había olvidado de verificar la explicación de Mozilla de esta función, porque yo (el autor de la pregunta) estaba enfocado en la rotura solo de IE8.
benc
2
en pocas palabras: developer.mozilla.org/en/DOM/window.open -> "strWindowName no especifica el título de la nueva ventana".
benc
33
También tuve este error en IE cuando mi nombre de Windows tenía un guión "-" en el nombre como "my-windowname", la calidad de IE nunca deja de sorprenderme.
Matt Palmerlee
1
La página de documentación de MSDN a la que se vinculó dice "Opcional. Cadena que especifica el nombre de la ventana", que me parece que debería poder utilizar cualquier palabra clave además de los argumentos que enumeró anteriormente.
James McMahon
3
Funciona en IE8 con nombres como ImageDisplay1234 pero no funciona con Image-Display-1234
boatcoder
78

IE es exigente con el argumento del nombre de la ventana. No le gustan los espacios, guiones u otros signos de puntuación.

prlafferty
fuente
3
o puntos o guiones o tal vez otra puntuación
boatcoder
Gracias, esto es
útil ... realmente
16

Cuando llama window.opena IE, el segundo argumento (nombre de la ventana) tiene que ser una de las cadenas de destino predefinidas o una cadena, que tiene la forma de un identificador válido en JavaScript.

Entonces, lo que funciona en Firefox: "Job Directory 9463460", no funciona en Internet Exploder y debe ser reemplazado por: "Job_Directory_9463460" por ejemplo (sin espacios, sin signos menos, sin puntos, tiene que ser un identificador válido) .

Sr. Napik
fuente
Gracias ... esto me ayudó ... Tenía guiones (-) en el nombre de mi ventana
delux247
8

el problema podría ser el wname, intente usar uno de los que se muestran en el enlace anterior, cito:

Opcional. Cadena que especifica el nombre de la ventana. Este nombre se utiliza como valor para el atributo TARGET en un formulario o un elemento de anclaje.

  • _blank La URL sURL se carga en una nueva ventana sin nombre.
  • _media La URL se carga en la barra de medios en Microsoft Internet Explorer 6. Microsoft Windows XP Service Pack 2 (SP2) y posterior. Esta función ya no es compatible. De forma predeterminada, la URL se carga en una nueva ventana o pestaña del navegador.
  • _parent El sURL se carga en el padre del marco actual. Si el marco no tiene padre, este valor actúa como el valor _self.
  • _search Desactivado en Windows Internet Explorer 7, consulte Seguridad y compatibilidad en Internet Explorer 7 para obtener más detalles. De lo contrario, sURL se abre en el panel de búsqueda del navegador en Internet Explorer 5 o posterior.
  • _self El documento actual se reemplaza con el sURL especificado.
  • _top sURL reemplaza cualquier conjunto de marcos que se pueda cargar. Si no hay conjuntos de marcos definidos, este valor actúa como el valor _self.

si usa otro wname, window.open no se ejecutará ...

Joaquín
fuente
5
Esa última afirmación no es correcta. También puede (a) especificar el nombre de un marco existente para cargar la página en ese marco, (b) especificar el nombre de una "ventana con nombre" existente para cargar la página allí, o (c) especificar un nombre que no No existe para crear una "ventana con nombre".
Ben Blank
Tuve el mismo problema, excepto que no estaba configurando el resultado de window.open en una variable. Tenía un título de página en la variable wname. Lo cambió a '_blank' y solucionó el problema.
Derek White
Lo que lo reduje fue no incluir - o. Cuando me deshice de la puntuación Image-Display-1234 -> ImageDisplay1234, todo estaba bien.
boatcoder
1
Para respaldar el argumento de Ben, esto es lo que MSDN dice sobre el segundo parámetro de window.open: "Cadena que especifica el nombre de la ventana. Este nombre se usa como valor para el atributo TARGET en un formulario o elemento de anclaje". Y aquí está el documento de atributo TARGET: msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx . Dice claramente que el objetivo puede ser una cadena arbitraria y no solo los valores enumerados en esta respuesta.
niaher
5

En realidad, se puede usar un nombre, pero no puede tener espacios, por lo que window.open("../myPage","MyWindows",...)debería funcionar sin problemas ( window.open ).

oliver
fuente
4

También me encuentro con este problema mientras usé el siguiente código:

window.open('test.html','Window title','width=1200,height=800,scrollbars=yes');

pero cuando elimino el espacio en blanco del "Título de la ventana", el siguiente código está funcionando:

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes');
Raymond
fuente
Esto fue muy útil. Terminé reemplazando mis espacios con _. ¡Estúpido IE!
MrGlass
2

Hola, usando el siguiente código está funcionando ...

onclick="window.open('privacy_policy.php','','width=1200,height=800,scrollbars=yes');

Anteriormente entré como

onclick="window.open('privacy_policy.php','Window title','width=1200,height=800,scrollbars=yes');

Significa que Microsoft no le permite ingresar el nombre de la ventana, debe estar en blanco en la window.openfunción ...

Gracias, Nilesh Pangul

Nilesh Pangul
fuente
Esto es incorrecto, puede estar en blanco pero no tiene que estar en blanco.
Jimmy Bosse
2

Para mí, el problema fue con un guión "-" en el campo del nombre de la ventana. Eliminé los guiones e IE no muestra errores y, de hecho, abre la ventana.

iohans
fuente
1

¿Qué representa la posición cuatro, la que tiene 'falso' como valor? ¿No debería ser falso (es decir, sin comillas?). Es posible que las versiones anteriores de IE forzaran la cadena a un booleano, pero las más nuevas no.

x0n
fuente
Eliminé las comillas, pero no fue la fuente del problema para IE8.
benc
1

Las respuestas aquí son correctas en el sentido de que IE no admite espacios al configurar el título en window.open (), ninguno parece ofrecer una solución.

Eliminé el título de mi llamada window.open (puede usar null o ''), y luego agregué lo siguiente a la página que se está abriendo:

<script>document.title = 'My new title';</script>

No es ideal de ninguna manera, pero esto le permitirá establecer el título como desee en todos los navegadores.

MrGlass
fuente
0

Intente eliminar el último argumento. Aparte de eso, asegúrese de que existan urlstring, wname y wfeatures.

Macha
fuente
0

Descubrí el mismo problema y después de leer la primera respuesta que supuso que el problema es causado por el nombre de la ventana, lo cambié: primero a '_blank', que funcionó bien (tanto la compatibilidad como la vista normal), luego al valor anterior, solo menos el espacio en el valor :) - también funcionó. En mi opinión, el problema (o parte de él) se debe a que IE no puede usar un valor de cadena normal como wname. Espero que esto ayude si alguien se encuentra con el mismo problema.


fuente
0

Si desea usar el nombre de la nueva ventana, etc., publicando un formulario en esta ventana, entonces la solución, que funciona en IE, FF, Chrome:

  var ret = window.open("", "_blank");
  ret.name = "NewFormName";

  var myForm = document.createElement("form");
  myForm.method="post";
  myForm.action = "xyz.php";
  myForm.target = "NewFormName";

      ...
Belinszki Imre
fuente
0

Parece que cuando incluso se usa un nombre de ventana personalizado "válido" (no _blank, etc.) usando window.open para abrir una nueva ventana, todavía hay problemas. Funciona bien la primera vez que hace clic en el enlace, pero si vuelve a hacer clic en él (con la primera ventana abierta todavía abierta), recibirá un error de depuración del script "Error: No se admite dicha interfaz".

Vince
fuente