2009-04-02 7 views
111

J'ai un site qui a un problème IE8 seule:ie8 var w = window.open() - "Message: argument invalide."

Le code est:

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

L'erreur est:

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

Je confirme le numéro de ligne du code (la "ligne" et "URI" sont corrects), et je comprends dans les versions ultérieures de IE8, cela est considéré comme précis.

J'ai vérifié tous les paramètres entrants dans l'appel en vidant les alertes, et ils semblent tous valides.

Ce problème ne se produit pas sur FF (probablement 3).

MISE À JOUR:

Le problème semble être en utilisant l'affectation du résultat de window.open() lors d'un "var w". Lorsque je divise la ligne en deux instructions cela fonctionne dans IE8.

MAJ2:

Basé sur:

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.

Ce n'est pas exactement ce qui se passe ici, mais je trouve que l'application du principe résolu le problème, dans le mode de compatibilité IE8 .

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

J'ai eu le même problème, et le post de David est la meilleure réponse. Merci pour votre message et pour l'aide de David. – Ervin

Répondre

251

Ceci est une ancienne publication, mais peut-être encore utile pour quelqu'un.

J'ai eu le même message d'erreur. Finalement, le problème était un nom invalide pour le second argument, à savoir que j'avais une ligne comme:

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

Le problème était « un titre de fenêtre » comme il est pas valide.Il a bien fonctionné avec la ligne suivante:

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

En fait, de lire attentivement j'ai réalisé que Microsoft ne supporte pas name comme second argument. Lorsque vous regardez le official documentation page, vous voyez que Microsoft ne permet que les arguments suivants, si vous utilisez cet argument du tout:

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

Je pense que j'avais négligé de vérifier l'explication de Mozilla de cette fonction, parce que je (demandeur) se concentrait sur la rupture d'IE8 seulement. – benc

+2

simplement mis: https://developer.mozilla.org/fr/DOM/window.open -> "strWindowName ne spécifie pas le titre de la nouvelle fenêtre." – benc

+0

J'ai également récemment trouvé que le message était causé par des caractères illégaux "/" et "+" transmis dans wname. FF3 ne semble pas s'opposer. En ce sens, je pense que seul IE8 est strict, mais c'est probablement une bonne chose. – benc

0

Essayez de supprimer le dernier argument. Sinon, assurez-vous que urlstring, wname et wfeatures existent.

1

Que représente la position quatre, celle qui a 'false' comme valeur? Cela ne devrait-il pas être faux (c'est-à-dire sans guillemets?). Il est possible que les versions antérieures d'IE forcent la chaîne à un booléen, mais pas les plus récentes.

+0

J'ai supprimé les guillemets, mais ce n'était pas la source du problème pour IE8. – benc

8

le problème pourrait être le wname, essayez d'utiliser l'un des ceux indiqués dans le lien ci-dessus, je cite:

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 vous utilisez un autre wname, window.open n'exécutera ...

+5

Cette dernière déclaration est incorrecte. Vous pouvez aussi (a) spécifier le nom d'une image existante pour charger la page dans cette image, (b) spécifier le nom d'une "fenêtre nommée" existante pour y charger la page, ou (c) spécifier un nom qui ne l'est pas t existe pour créer une "fenêtre nommée". –

+0

J'ai rencontré le même problème, sauf que je ne définissais pas le résultat de window.open dans une variable. Avait un titre de page dans la variable wname. Changé à '_blank' et il a résolu le problème. –

+0

Ce que j'ai réduit à était de ne pas inclure - ou. Quand je me suis débarrassé de la ponctuation Image-Display-1234 -> ImageDisplay1234 alors tout allait bien. – boatcoder

0

J'ai découvert le même problème et après avoir lu la première réponse qui supposait que le problème était causé par le nom de la fenêtre, l'ai changé: d'abord '_blank', qui fonctionnait bien (compatibilité et vue régulière), puis à la valeur précédente moins l'espace dans la valeur :) - a également travaillé. IMO, le problème (ou une partie de celui-ci) est causé par IE étant incapable d'utiliser une valeur de chaîne normale comme wname. J'espère que cela aide si quelqu'un rencontre le même problème.

77

IE est pointilleux sur le nom de la fenêtre argu ment. Il n'aime pas les espaces, les tirets ou autres signes de ponctuation.

+6

Donc ridicule que c'est la raison:/ –

+3

ou des points ou des tirets ou peut-être d'autres signes de ponctuation – boatcoder

+3

est acceptable – Ryan

16

Lorsque vous appelez window.open dans IE, le second argument (nom de la fenêtre) doit être soit une des chaînes de caractères prédéfinies cible ou une chaîne, qui a une forme d'un identificateur valide en JavaScript.

Alors ce qui fonctionne dans Firefox: « Répertoire d'emploi 9463460 », ne le fait pas travail dans Internet exploseur, et doit être remplacé par: « Job_Directory_9463460 » par exemple (pas d'espace, pas de signe moins, pas de points, il a être un identifiant valide).

+0

Merci .. cela m'a aidé .. J'ai eu des tirets (-) dans mon nom de fenêtre – delux247

0

Si vous voulez utiliser le nom de la nouvelle fenêtre, etc. affichant un formulaire à cette fenêtre, puis la solution, que le travail dans 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'en est-safari? – toxicate20

5

En fait, un nom peut être utilisé mais il ne peut pas avoir des espaces si window.open("../myPage","MyWindows",...) devrait fonctionner sans problème (window.open).

2

Salut en utilisant le code suivant son de travail ...

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

Auparavant je suis entré comme

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

Signifie Microsoft ne vous permet pas d'entrer le nom de la fenêtre, il doit être vide dans window.open fonction. ..

Merci, Nilesh Pangul

+0

Ceci est incorrect, il peut être vide mais ne doit pas être vide. –

2

Pour moi, le problème était avec un tiret "-" dans le champ de nom de la fenêtre. J'ai enlevé les tirets et IE ne fait pas d'erreur et en fait ouvre la fenêtre.

4

Je rencontre également ce problème alors que je le code suivant:

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

mais quand je supprime le le code ci-dessous espace vide du « titre de la fenêtre » est travaillé:

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

C'était très utile. Terminé en remplaçant mes espaces avec _. Stupide IE! – MrGlass

1

Les réponses sont correctes car IE ne supporte pas les espaces lors de la définition du titre dans window.open(), aucun ne semble offrir une solution de contournement.

J'ai enlevé le titre de mon appel window.open (vous pouvez utiliser null ou « »), et HTEN ajouté ce qui suit à la page en cours d'ouverture:

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

Pas idéal par tout moyen, mais vous permettra de définir le titre à tout ce que vous voulez dans tous les navigateurs.

0

Il semble que même en utilisant un nom de fenêtre personnalisé "valide" (pas _blank, etc.) en utilisant window.open pour lancer une nouvelle fenêtre, il y a toujours des problèmes. Cela fonctionne bien la première fois que vous cliquez sur le lien, mais si vous cliquez à nouveau dessus (avec la première fenêtre lancée toujours en haut), vous recevez un débogage de script "Erreur: Aucune interface prise en charge".