ie8 var w = window.open () - "Message: Argument non valide."

113

J'ai un site qui a un problème avec IE8 uniquement:

Le code est:

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

L'erreur est:

Message: argument non valide.
Ligne: 419 Char: 5
Code: 0
URI: http: //HOSTNAME/js_context.js

J'ai confirmé le numéro de ligne du code (la «ligne» et «l'URI» sont corrects), et je comprends que dans les versions ultérieures d'IE8, cela est considéré comme exact.

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

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

METTRE À JOUR:

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

UPDATE2:

Basé sur:

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

Lorsqu'une fonction doit être appelée immédiatement, l'expression d'appel entière doit être entourée de parenthèses afin qu'il soit clair que la valeur produite est le résultat de la fonction et non la fonction elle-même.

Ce n'est pas exactement ce qui se passe ici, mais j'ai trouvé que l'application du principe résolvait le problème, en mode de compatibilité d'IE8.

var w = (window.open(urlstring, wname, wfeatures, false));
benc
la source
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éponses:

251

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

J'ai eu le même message d'erreur. En fin de compte, le problème était un nom invalide pour le deuxième argument, c'est-à-dire que j'avais une ligne comme:

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

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

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

En fait, en lisant attentivement, j'ai réalisé que Microsoft ne prend pas en charge un namedeuxième argument. Lorsque vous regardez la page de documentation officielle , vous voyez que Microsoft autorise uniquement les arguments suivants, si vous utilisez cet argument du tout:

  • _Vide
  • _médias
  • _parent
  • _chercher
  • _soi
  • _Haut
Stefan
la source
1
Je pense que j'avais négligé de vérifier l'explication Mozilla de cette fonction, parce que je (demandeur) était concentré sur la casse d'IE8 uniquement.
benc
2
en termes simples: developer.mozilla.org/en/DOM/window.open -> "strWindowName ne spécifie pas le titre de la nouvelle fenêtre."
benc
33
J'ai également eu cette erreur dans IE lorsque mon nom de Windows avait un tiret "-" dans le nom tel que "my-windowname", la qualité IE ne cesse de m'étonner.
Matt Palmerlee
1
La page de documentation MSDN à laquelle vous avez lié indique "Facultatif. Chaîne qui spécifie le nom de la fenêtre.", Cela me semble que vous devriez pouvoir utiliser n'importe quel mot clé en plus des arguments que vous avez énumérés ci-dessus.
James McMahon
3
Il fonctionne dans IE8 avec des noms comme ImageDisplay1234 mais ne fonctionne pas avec Image-Display-1234
boatcoder
78

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

propriété
la source
3
ou des points ou des tirets ou peut-être une autre ponctuation
boatcoder
Merci, c'est
utile .. déteste vraiment
16

Lorsque vous appelez window.opendans IE, le deuxième argument (nom de la fenêtre) doit être l'une des chaînes cibles prédéfinies ou une chaîne, qui a la forme d'un identifiant valide en JavaScript.

Donc ce qui fonctionne dans Firefox: "Job Directory 9463460", ne fonctionne pas dans Internet Exploder, et doit être remplacé par: "Job_Directory_9463460" par exemple (pas d'espaces, pas de signe moins, pas de points, il doit s'agir d'un identifiant valide) .

M. Napik
la source
Merci .. cela m'a aidé .. J'avais des tirets (-) dans le nom de ma fenêtre
delux247
8

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

Optionnel. Chaîne qui spécifie le nom de la fenêtre. Ce nom est utilisé comme valeur pour l'attribut TARGET sur un formulaire ou un élément d'ancrage.

  • _blank La sURL est chargée dans une nouvelle fenêtre sans nom.
  • _media L'URL est chargée dans la barre multimédia de Microsoft Internet Explorer 6. Microsoft Windows XP Service Pack 2 (SP2) et versions ultérieures. Cette fonctionnalité n'est plus prise en charge. Par défaut, l'URL est chargée dans une nouvelle fenêtre ou un nouvel onglet du navigateur.
  • _parent La sURL est chargée dans le parent du cadre actuel. Si le cadre n'a pas de parent, cette valeur agit comme la valeur _self.
  • _search Désactivé dans Windows Internet Explorer 7, voir Sécurité et compatibilité dans Internet Explorer 7 pour plus de détails. Sinon, la sURL est ouverte dans le volet de recherche du navigateur dans Internet Explorer 5 ou version ultérieure.
  • _self Le document actuel est remplacé par la sURL spécifiée.
  • _top sURL remplace tous les jeux de cadres qui peuvent être chargés. Si aucun jeu de cadres n'est défini, cette valeur agit comme la valeur _self.

si vous utilisez un autre wname, window.open ne s'exécutera pas ...

Joaquin
la source
5
Cette dernière déclaration n'est pas correcte. Vous pouvez également (a) spécifier le nom d'un cadre existant pour charger la page dans ce cadre, (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 t existent pour créer une "fenêtre nommée".
Ben Blank
J'ai eu le même problème sauf que je ne définissais pas le résultat de window.open sur une variable. Avait un titre de page dans la variable wname. Je l'ai changé en «_blank» et cela a résolu le problème.
Derek White
Ce que j'ai restreint, c'est de ne pas inclure - ou. Quand je me suis débarrassé de la ponctuation Image-Display-1234 -> ImageDisplay1234 alors tout allait bien.
boatcoder
1
Pour soutenir l'argument de Ben, voici ce que MSDN dit à propos du deuxième paramètre de window.open: "Chaîne qui spécifie le nom de la fenêtre. Ce nom est utilisé comme valeur pour l'attribut TARGET sur un formulaire ou un élément d'ancrage." Et voici l'attribut TARGET doc: msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx . Il dit clairement que la cible peut être une chaîne arbitraire et pas seulement les valeurs répertoriées dans cette réponse.
niaher
5

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

oliver
la source
4

Je rencontre également ce problème en utilisant le code suivant:

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

mais lorsque je supprime l' espace vide du "Titre de la fenêtre", le code ci-dessous fonctionne:

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes');
Raymond
la source
Cela a été très utile. J'ai fini par remplacer mes espaces par _. Stupide IE!
MrGlass
2

Salut en utilisant le code suivant son fonctionnement ...

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 que Microsoft ne vous permet pas de saisir le nom de la fenêtre, il doit être vide dans la window.openfonction ...

Merci, Nilesh Pangul

Nilesh Pangul
la source
Ceci est incorrect, il peut être vide mais ne doit pas nécessairement l'être.
Jimmy Bosse
2

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

iohans
la source
1

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

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

Les réponses ici sont correctes dans la mesure où IE ne prend pas en charge les espaces lors de la définition du titre dans window.open (), aucun ne semble offrir une solution de contournement.

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

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

Pas idéal du tout, mais cela vous permettra de définir le titre comme vous le souhaitez dans tous les navigateurs.

MrGlass
la source
0

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

Macha
la source
0

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


la source
0

Si vous souhaitez utiliser le nom de la nouvelle fenêtre, etc. en publiant un formulaire dans cette fenêtre, alors la solution, qui fonctionne 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";

      ...
Belinszki Imre
la source
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 (avec la première fenêtre lancée toujours ouverte), vous recevez un débogage de script "Erreur: aucune interface de ce type n'est prise en charge".

Vince
la source