web-dev-qa-db-fra.com

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

J'ai un site qui a un problème 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 ("Line" et "URI" sont corrects), et je comprends dans les versions ultérieures de IE8 que cela est considéré comme exact.

J'ai vérifié tous les paramètres entrants dans l'appel en déchargeant des alertes et ils ont tous l'air valables.

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

MISE À JOUR:

Le problème semble être lié à l’affectation du résultat de window.open () à l’utilisation de "var w". Lorsque je divise la ligne en deux déclarations, cela fonctionne dans IE8.

UPDATE2:

Basé sur:

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

Lorsqu'une fonction doit être appelée immédiatement, l'intégralité de l'expression d'invocation doit être encapsulée dans des 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 constaté que l'application du principe permettait de résoudre le problème, dans le mode de compatibilité d'IE8.

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

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 une ligne comme celle-ci:

   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 name comme second argument. Lorsque vous regardez page de la documentation officielle , vous constatez que Microsoft n'autorise que les arguments suivants, Si vous utilisez cet argument du tout:

  • _blanc
  • _médias
  • _parent
  • _chercher
  • _soi
  • _Haut
251
Stefan

IE est difficile quant à l'argument du nom de la fenêtre. Il n'aime pas les espaces, les tirets ou toute autre ponctuation.

78
prlafferty

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

Donc ce qui fonctionne dans Firefox: "Répertoire du travail 9463460", ne fonctionne pas dans Internet Exploder, et doit être remplacé par: "Job_Directory_9463460" par exemple (pas d'espaces, pas de signes moins, pas de points, il doit être un identifiant valide).

16
Mr. Napik

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 spécifiant 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 Le sURL est chargé dans une nouvelle fenêtre sans nom.
  • _media L'URL est chargée dans la barre des médias dans 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 de l'image actuelle. 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, le sURL est ouvert dans le volet de recherche du navigateur dans Internet Explorer 5 ou une version ultérieure.
  • _self Le document actuel est remplacé par le sURL spécifié.
  • _top sURL remplace tous les cadres pouvant être chargés. Si aucun jeu de cadres n'est défini, cette valeur agit comme la valeur _self.

si vous utilisez un autre nom de fichier, window.open ne sera pas exécuté ...

8
Joaquin

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

5
oliver

Je rencontre également ce problème lorsque j'ai utilisé le code suivant:

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

mais quand je supprime le espace vide du "titre de la fenêtre" le code ci-dessous fonctionne:

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

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, celle-ci doit être vide dans window.open une fonction...

Merci Nilesh Pangul

2
Nilesh Pangul

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

2
iohans

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

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

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

Ce n’est pas idéal du tout, mais cela vous permettra de définir le titre comme vous le souhaitez dans tous les navigateurs.

1
MrGlass

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

1
x0n

Essayez de supprimer le dernier argument. Autre que cela, assurez-vous que la chaîne d'URL, le nom et les fonctionnalités existent.

0
Macha

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 correctement 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 ouverte), vous recevez un script de débogage "Erreur: Aucune interface de ce type n'est prise en charge".

0
Vince

Si vous souhaitez utiliser le nom de la nouvelle fenêtre, etc. pour poster un formulaire dans cette fenêtre, utilisez 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";

      ...
0
Belinszki Imre