2009-04-02 19 views
111

tengo un sitio que tiene un IE8-único problema:ie8 var w = window.open() - "Mensaje: argumento no válido".

El código es:

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

El error es:

Message: Invalid argument.
Line: 419 Char: 5
Code: 0
URI: http://HOSTNAME/js_context.js

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

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

Este problema no ocurre en FF (probablemente 3).

ACTUALIZACIÓN:

El problema parece estar en uso de asignar el resultado de window.open() cuando se hace "W var". Cuando divido la línea en dos declaraciones, funciona en IE8.

Update2:

Basado en:

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

When a function is to be invoked immediately, the entire invocation expression should be wrapped in parens so that it is clear that the value being produced is the result of the function and not the function itself.

Esto no es exactamente lo que está pasando aquí, pero he encontrado que la aplicación del principio resolvió el problema, en el modo de compatibilidad de Internet Explorer 8 .

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

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

Respuesta

251

Esta es una publicación antigua pero tal vez sigue siendo útil para alguien.

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

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

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

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

De hecho, leer detenidamente me di cuenta que Microsoft no admite una name como segundo argumento. Cuando nos fijamos en la official documentation page, se ve que Microsoft sólo permite los siguientes argumentos, si se utiliza ese argumento en absoluto:

  • _blank
  • _media
  • _parent
  • _search
  • _self
  • _top
+1

Creo que me olvidé de consultar la explicación de Mozilla de esta función, porque I (asker) se centró en la rotura solo IE8. – benc

+2

simplemente escriba: https://developer.mozilla.org/en/DOM/window.open -> "strWindowName no especifica el título de la nueva ventana". – benc

+0

También descubrí recientemente que el mensaje fue causado por caracteres ilegales "/" y "+" que se pasaron a wname. FF3 no parece objetar. En este sentido, creo que solo IE8 es estricto, pero probablemente sea algo bueno. – benc

0

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

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 fuercen la cadena a un booleano, pero las versiones más nuevas no lo hacen.

+0

Quité las comillas, pero no fue la fuente del problema para IE8. – benc

8

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

Optional. String that specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element.

  • _blank The sURL is loaded into a new, unnamed window.
  • _media The url is loaded in the Media Bar in Microsoft Internet Explorer 6. Microsoft Windows XP Service Pack 2 (SP2) and later. This feature is no longer supported. By default the url is loaded into a new browser window or tab.
  • _parent The sURL is loaded into the current frame's parent. If the frame has no parent, this value acts as the value _self.
  • _search Disabled in Windows Internet Explorer 7, see Security and Compatibility in Internet Explorer 7 for details. Otherwise, the sURL is opened in the browser's search pane in Internet Explorer 5 or later.
  • _self The current document is replaced with the specified sURL.
  • _top sURL replaces any framesets that may be loaded. If there are no framesets defined, this value acts as the value _self.

si se utiliza otra wname, window.open no ejecutará ...

+5

Esa última declaración no es correcta. También puede (a) especificar el nombre de un fotograma existente para cargar la página en ese fotograma, (b) especificar el nombre de una "ventana con nombre" existente para cargar la página allí, o (c) especificar un nombre que no lo haga t existe para crear una "ventana con nombre". –

+0

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. –

+0

Lo que lo reduje a era no incluir - o. Cuando me deshice de la puntuación Image-Display-1234 -> ImageDisplay1234, todo estaba bien. – boatcoder

0

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

77

IE es quisquilloso con la ventana nombre argu ment. No le gustan los espacios, guiones u otros signos de puntuación.

+6

Tan ridículo que este es el motivo:/ –

+3

o puntos o rayas o tal vez otra puntuación – boatcoder

+3

subrayado es aceptable – Ryan

16

Cuando se llama a window.open en IE, el segundo argumento (nombre de la ventana) tiene que ser uno de los predefinidos objetivo cuerdas o una cadena, que tiene una forma de un identificador válido en JavaScript .

Así que lo que funciona en Firefox: "Directorio de empleo 9463460", no trabajo en internet detonador, y tiene que ser reemplazado por: "Job_Directory_9463460", por ejemplo (sin espacios ni signos menos, sin puntos, tiene ser un identificador válido).

+0

Gracias ... esto me ayudó ... Tenía guiones (-) en mi nombre de ventana – delux247

0

Si desea utilizar el nombre de la nueva ventana, etc publicar un formulario para 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"; 

     ... 
+0

¿qué tal safari? – toxicate20

5

En realidad, el nombre puede ser utilizado sin embargo, no puede tener espacios para que window.open("../myPage","MyWindows",...) funcione correctamente (window.open).

2

Hola usando el siguiente código de su trabajo ...

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'); 

Medios Microsoft no permite que ingrese nombre de la ventana debe estar en blanco en window.open función. ..

Gracias, Nilesh Pangul

+0

Esto es incorrecto, puede estar en blanco pero no tiene que estar en blanco. –

2

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

4

también me encuentro con este problema, mientras que utilicé el siguiente código:

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

pero cuando se borra la espacio en blanco del "Título de la ventana" el código de abajo está funcionando:

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes'); 
+0

Esto fue muy útil. Terminé reemplazando mis espacios con _. Estúpido IE! – MrGlass

1

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

quité el título de mi llamada window.open (se puede utilizar o nula ''), y Hten añade lo siguiente a la página que se está abierto:

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

No es ideal, por cualquier medio, pero esto le permitirá configurar el título para lo que desee en todos los navegadores.

0

Parece que incluso al usar 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 (con la primera ventana iniciada aún activa) recibirá una depuración de script "Error: No se admite esa interfaz".

Cuestiones relacionadas