ie8 var w = window.open () - "Nachricht: Ungültiges Argument."


113

Ich habe eine Site, die nur ein IE8-Problem hat:

Der Code lautet:

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

Der Fehler ist:

Nachricht: Ungültiges Argument.
Zeile: 419 Zeichen: 5
Code: 0
URI: http: //HOSTNAME/js_context.js

Ich habe die Zeilennummer des Codes bestätigt (die "Zeile" und "URI" sind korrekt) und ich verstehe, dass dies in späteren Versionen von IE8 als korrekt angesehen wird.

Ich habe alle eingehenden Parameter im Aufruf überprüft, indem ich Warnungen ausgegeben habe, und sie sehen alle gültig aus.

Dieses Problem tritt bei FF nicht auf (wahrscheinlich 3).

AKTUALISIEREN:

Das Problem scheint darin zu liegen, das Ergebnis von window.open () zuzuweisen, wenn "var w" ausgeführt wird. Wenn ich die Zeile in zwei Anweisungen aufteile, funktioniert das in IE8.

UPDATE2:

Beyogen auf:

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

Wenn eine Funktion sofort aufgerufen werden soll, sollte der gesamte Aufrufausdruck in Parens eingeschlossen werden, damit klar ist, dass der erzeugte Wert das Ergebnis der Funktion und nicht der Funktion selbst ist.

Dies ist nicht genau das, was hier vor sich geht, aber ich fand heraus, dass die Anwendung des Prinzips das Problem im Kompatibilitätsmodus von IE8 löste.

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

Ich hatte das gleiche Problem und Davids Beitrag ist die beste Antwort. Vielen Dank für Ihren Beitrag und für Davids Hilfe.
Ervin

Antworten:


251

Dies ist ein alter Beitrag, aber vielleicht immer noch nützlich für jemanden.

Ich hatte die gleiche Fehlermeldung. Am Ende war das Problem ein ungültiger Name für das zweite Argument, dh ich hatte eine Zeile wie:

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

Das Problem war "ein Fenstertitel", da er nicht gültig ist. Mit der folgenden Zeile hat es gut funktioniert:

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

Beim sorgfältigen Lesen wurde mir klar, dass Microsoft ein namezweites Argument nicht unterstützt . Wenn Sie sich die offizielle Dokumentationsseite ansehen , sehen Sie, dass Microsoft nur die folgenden Argumente zulässt, wenn Sie dieses Argument überhaupt verwenden:

  • _leer
  • _Medien
  • _Elternteil
  • _Suche
  • _selbst
  • _oben

1
Ich glaube, ich hatte es versäumt, die Mozilla-Erklärung dieser Funktion zu überprüfen, weil ich (Fragesteller) mich auf einen Nur-IE8-Bruch konzentrierte.
Benc

2
Einfach ausgedrückt: developer.mozilla.org/en/DOM/window.open -> "strWindowName gibt den Titel des neuen Fensters nicht an."
Benc

33
Ich hatte diesen Fehler auch im IE, als mein Windows-Name einen Bindestrich "-" im Namen wie "mein-Windowname" hatte. Die IE-Qualität überrascht mich immer wieder.
Matt Palmerlee

1
Auf der MSDN-Dokumentationsseite, auf die Sie verlinkt haben, heißt es "Optional. Zeichenfolge, die den Namen des Fensters angibt.". Das klingt für mich so, als ob Sie in der Lage sein sollten, ein anderes Schlüsselwort als die oben aufgeführten Argumente zu verwenden.
James McMahon

3
Es funktioniert in IE8 mit Namen wie ImageDisplay1234, aber nicht mit Image-Display-1234
Bootscodierer

78

IE ist wählerisch in Bezug auf das Fensternamenargument. Es mag keine Leerzeichen, Bindestriche oder andere Interpunktion.


3
oder Punkte oder Striche oder vielleicht andere Interpunktion
Bootscodierer

Vielen Dank, das ist hilfreich. Hassen Sie wirklich IE 6-10
Dilip Godhani

16

Wenn Sie den window.openIE aufrufen , muss das zweite Argument (Fenstername) entweder eine der vordefinierten Zielzeichenfolgen oder eine Zeichenfolge sein, die in JavaScript die Form eines gültigen Bezeichners hat .

Was also in Firefox funktioniert: "Job Directory 9463460", funktioniert nicht in Internet Exploder und muss ersetzt werden durch: "Job_Directory_9463460" zum Beispiel (keine Leerzeichen, keine Minuszeichen, keine Punkte, es muss eine gültige Kennung sein) .


Danke .. das hat mir geholfen .. Ich hatte Bindestriche (-) in meinem Fensternamen
delux247

8

Das Problem könnte der Name sein. Versuchen Sie, einen der im obigen Link gezeigten zu verwenden. Ich zitiere:

Optional. Zeichenfolge, die den Namen des Fensters angibt. Dieser Name wird als Wert für das TARGET-Attribut in einem Formular oder einem Ankerelement verwendet.

  • _blank Die sURL wird in ein neues, unbenanntes Fenster geladen.
  • _media Die URL wird in die Medienleiste von Microsoft Internet Explorer 6 geladen. Microsoft Windows XP Service Pack 2 (SP2) und höher. Diese Funktion wird nicht mehr unterstützt. Standardmäßig wird die URL in ein neues Browserfenster oder eine neue Registerkarte geladen.
  • _parent Die sURL wird in das übergeordnete Element des aktuellen Frames geladen. Wenn der Frame kein übergeordnetes Element hat, fungiert dieser Wert als Wert _self.
  • _search In Windows Internet Explorer 7 deaktiviert. Weitere Informationen finden Sie unter Sicherheit und Kompatibilität in Internet Explorer 7. Andernfalls wird die sURL im Suchbereich des Browsers in Internet Explorer 5 oder höher geöffnet.
  • _self Das aktuelle Dokument wird durch die angegebene sURL ersetzt.
  • _top sURL ersetzt alle Framesets, die möglicherweise geladen werden. Wenn keine Framesets definiert sind, fungiert dieser Wert als Wert _self.

Wenn Sie einen anderen wnamen verwenden, wird window.open nicht ausgeführt ...


5
Diese letzte Aussage ist nicht richtig. Sie können auch (a) den Namen eines vorhandenen Frames angeben, um die Seite in diesen Frame zu laden, (b) den Namen eines vorhandenen "benannten Fensters" angeben, um die Seite dort zu laden, oder (c) einen Namen angeben, der dies nicht tut. t vorhanden, um ein "benanntes Fenster" zu erstellen.
Ben Blank

Ich hatte das gleiche Problem, außer dass ich das Ergebnis von window.open nicht auf eine Variable gesetzt habe. Hatte einen Seitentitel in der Variablen wname. Es wurde in '_blank' geändert und das Problem wurde behoben.
Derek White

Was ich eingegrenzt habe, war nicht einschließen - oder. Als ich die Interpunktion Image-Display-1234 -> ImageDisplay1234 loswurde, war alles in Ordnung.
Bootscodierer

1
Um Bens Argument zu unterstützen, sagt MSDN Folgendes über den zweiten Parameter von window.open: "Zeichenfolge, die den Namen des Fensters angibt. Dieser Name wird als Wert für das TARGET-Attribut in einem Formular oder einem Ankerelement verwendet." Und hier ist das TARGET-Attribut doc: msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx . Es heißt eindeutig, dass das Ziel eine beliebige Zeichenfolge sein kann und nicht nur die in dieser Antwort aufgeführten Werte.
Niaher

5

Eigentlich kann ein Name verwendet werden, er darf jedoch keine Leerzeichen enthalten und window.open("../myPage","MyWindows",...)sollte daher problemlos funktionieren ( window.open ).


4

Ich habe dieses Problem auch festgestellt, als ich den folgenden Code verwendet habe:

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

aber wenn ich die Leerstelle des "Fenstertitels" lösche, funktioniert der folgende Code:

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

Das war sehr hilfreich. Ich habe meine Leerzeichen durch _ ersetzt. Blöder IE!
MrGlass

2

Hallo mit dem folgenden Code funktioniert es ...

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

Zuvor habe ich wie eingegeben

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

Bedeutet, dass Microsoft die Eingabe des Fensternamens nicht zulässt. Die window.openFunktion sollte leer sein ...

Danke, Nilesh Pangul


Dies ist falsch, es kann leer sein, muss aber nicht leer sein.
Jimmy Bosse

2

Für mich war das Problem mit einem Bindestrich "-" im Feld Fensternamen. Ich habe die Bindestriche entfernt und der IE tritt nicht fehlerhaft auf und öffnet tatsächlich das Fenster.


1

Was bedeutet Position vier, die den Wert 'falsch' hat? Sollte das nicht falsch sein (dh ohne Anführungszeichen?). Es ist möglich, dass frühere Versionen von IE die Zeichenfolge zu einem Booleschen Wert zwingen, neuere jedoch nicht.


Ich habe die Anführungszeichen entfernt, aber es war nicht die Ursache des Problems für IE8.
Benc

1

Die Antworten hier sind insofern richtig, als der IE beim Festlegen des Titels in window.open () keine Leerzeichen unterstützt. Keiner scheint eine Problemumgehung zu bieten.

Ich habe den Titel aus meinem Aufruf von window.open entfernt (Sie können null oder '' verwenden) und dann der geöffneten Seite Folgendes hinzugefügt:

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

Auf keinen Fall ideal, aber dies ermöglicht es Ihnen, den Titel in allen Browsern auf das zu setzen, was Sie wollen.


0

Versuchen Sie, das letzte Argument zu entfernen. Stellen Sie außerdem sicher, dass URL-Zeichenfolge, wname und wfeatures vorhanden sind.


0

Ich entdeckte das gleiche Problem und nachdem ich die erste Antwort gelesen hatte, die vermutete, dass das Problem durch den Fensternamen verursacht wurde, änderte ich sie: zuerst in '_blank', was gut funktionierte (sowohl Kompatibilität als auch reguläre Ansicht), dann auf den vorherigen Wert, nur minus Der Platz im Wert :) - hat auch funktioniert. IMO, das Problem (oder ein Teil davon) wird dadurch verursacht, dass der IE keinen normalen Zeichenfolgenwert als w-Namen verwenden kann. Hoffe, das hilft, wenn jemand auf das gleiche Problem stößt.


0

Wenn Sie den Namen eines neuen Fensters usw. verwenden möchten, um ein Formular in diesem Fenster zu veröffentlichen, dann ist die Lösung, die in IE, FF, Chrome funktioniert:

  var ret = window.open("", "_blank");
  ret.name = "NewFormName";

  var myForm = document.createElement("form");
  myForm.method="post";
  myForm.action = "xyz.php";
  myForm.target = "NewFormName";

      ...

0

Es scheint, dass selbst bei Verwendung eines "gültigen" benutzerdefinierten Fensternamens (nicht _blank usw.) mit window.open zum Starten eines neuen Fensters immer noch Probleme auftreten. Es funktioniert einwandfrei, wenn Sie zum ersten Mal auf den Link klicken. Wenn Sie jedoch erneut darauf klicken (wobei das erste gestartete Fenster noch geöffnet ist), wird das Skript-Debug "Fehler: Keine solche Schnittstelle unterstützt" angezeigt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.