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));
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:
IE est difficile quant à l'argument du nom de la fenêtre. Il n'aime pas les espaces, les tirets ou toute autre ponctuation.
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).
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é ...
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 ).
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');
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
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.
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.
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.
Essayez de supprimer le dernier argument. Autre que cela, assurez-vous que la chaîne d'URL, le nom et les fonctionnalités existent.
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".
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";
...