ie8 var w = window.open () - "Messaggio: argomento non valido."


113

Ho un sito che ha un problema solo con IE8:

Il codice è:

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

L'errore è:

Messaggio: argomento non valido.
Linea: 419 Carattere: 5
Codice: 0
URI: http: //HOSTNAME/js_context.js

Ho confermato il numero di riga del codice ("Line" e "URI" sono corretti) e ho capito che nelle versioni successive di IE8 questo è considerato accurato.

Ho controllato tutti i parametri in entrata nella chiamata scaricando gli avvisi e sembrano tutti validi.

Questo problema non si verifica su FF (probabilmente 3).

AGGIORNARE:

Il problema sembra essere nell'usare l'assegnazione del risultato di window.open () quando si esegue "var w". Quando ho diviso la riga in due istruzioni, funziona in IE8.

UPDATE2:

Basato su:

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

Quando una funzione deve essere invocata immediatamente, l'intera espressione di chiamata deve essere racchiusa tra parentesi in modo che sia chiaro che il valore prodotto è il risultato della funzione e non la funzione stessa.

Non è esattamente quello che sta succedendo qui, ma ho scoperto che l'applicazione del principio ha risolto il problema, nella modalità di compatibilità di IE8.

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

Ho avuto lo stesso problema e il post di David è la risposta migliore. Grazie per il tuo post e per l'aiuto di David.
Ervin,

Risposte:


251

Questo è un vecchio messaggio ma forse è ancora utile per qualcuno.

Ho ricevuto lo stesso messaggio di errore. Alla fine il problema era un nome non valido per il secondo argomento, cioè avevo una riga come:

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

Il problema era "un titolo di finestra" in quanto non è valido. Ha funzionato bene con la seguente riga:

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

Infatti, leggendo attentamente mi sono reso conto che Microsoft non supporta un namesecondo argomento. Quando guardi la pagina della documentazione ufficiale , vedi che Microsoft consente solo i seguenti argomenti, se si utilizza affatto quell'argomento:

  • _blank
  • _media
  • _genitore
  • _ricerca
  • _se stesso
  • _superiore

1
Penso di aver trascurato di controllare la spiegazione di Mozilla di questa funzione, perché io (il richiedente) ero concentrato sulla rottura solo di IE8.
benc

2
in poche parole: developer.mozilla.org/en/DOM/window.open -> "strWindowName non specifica il titolo della nuova finestra."
benc

33
Ho anche avuto questo errore in IE quando il mio nome di Windows aveva un trattino "-" nel nome come "my-windowname", la qualità di IE non smette mai di stupirmi.
Matt Palmerlee

1
La pagina della documentazione di MSDN a cui hai collegato indica "Facoltativo. Stringa che specifica il nome della finestra.", A me sembra che dovresti essere in grado di utilizzare qualsiasi parola chiave oltre agli argomenti elencati sopra.
James McMahon

3
Funziona in IE8 con nomi come ImageDisplay1234 ma non funziona con Image-Display-1234
boatcoder

78

IE è pignolo sull'argomento del nome della finestra. Non ama spazi, trattini o altri segni di punteggiatura.


3
o punti o trattini o forse altra punteggiatura
boatcoder

Grazie, questo è utile .. odio
davvero

16

Quando si chiama window.openin IE, il secondo argomento (nome della finestra) deve essere una delle stringhe di destinazione predefinite o una stringa, che ha la forma di un identificatore valido in JavaScript.

Quindi ciò che funziona in Firefox: "Job Directory 9463460", non funziona in Internet Exploder e deve essere sostituito da: "Job_Directory_9463460" ad esempio (senza spazi, senza segni meno, senza punti, deve essere un identificatore valido) .


Grazie .. questo mi ha aiutato .. Avevo dei trattini (-) nel nome della mia finestra
delux247

8

il problema potrebbe essere il wname, prova a usare uno di quelli mostrati nel link sopra, cito:

Opzionale. Stringa che specifica il nome della finestra. Questo nome viene utilizzato come valore per l'attributo TARGET su un modulo o un elemento di ancoraggio.

  • _blank La sURL viene caricata in una nuova finestra senza nome.
  • _media L'URL viene caricato nella barra multimediale in Microsoft Internet Explorer 6. Microsoft Windows XP Service Pack 2 (SP2) e versioni successive. Questa funzione non è più supportata. Per impostazione predefinita, l'URL viene caricato in una nuova finestra o scheda del browser.
  • _parent La sURL viene caricata nel genitore del frame corrente. Se il frame non ha genitore, questo valore funge da valore _self.
  • _search Disabilitato in Windows Internet Explorer 7, vedere Sicurezza e compatibilità in Internet Explorer 7 per i dettagli. Altrimenti, sURL viene aperto nel riquadro di ricerca del browser in Internet Explorer 5 o successivo.
  • _self Il documento corrente viene sostituito con sURL specificato.
  • _top sURL sostituisce qualsiasi set di frame che può essere caricato. Se non ci sono set di frame definiti, questo valore funge da valore _self.

se si utilizza un altro wname, window.open non verrà eseguito ...


5
L'ultima affermazione non è corretta. Puoi anche (a) specificare il nome di un frame esistente per caricare la pagina in quel frame, (b) specificare il nome di una "finestra con nome" esistente per caricare la pagina lì, o (c) specificare un nome che non Non esiste per creare una "finestra con nome".
Ben Blank

Ho avuto lo stesso problema tranne che non stavo impostando il risultato di window.open su una variabile. Aveva un titolo di pagina nella variabile wname. Modificato in "_blank" e risolto il problema.
Derek White

Quello che ho ristretto è stato non includere - o. Quando mi sono sbarazzato della punteggiatura Image-Display-1234 -> ImageDisplay1234, tutto è andato bene.
boatcoder

1
Per supportare l'argomento di Ben, questo è ciò che MSDN dice sul secondo parametro di window.open: "Stringa che specifica il nome della finestra. Questo nome è usato come valore per l'attributo TARGET su un form o un elemento di ancoraggio." Ed ecco l'attributo TARGET doc: msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx . Dice chiaramente che l'obiettivo può essere una stringa arbitraria e non solo i valori elencati in questa risposta.
niaher

5

In realtà un nome può essere utilizzato ma non può avere spazi, quindi window.open("../myPage","MyWindows",...)dovrebbe funzionare senza problemi ( window.open ).


4

Ho riscontrato questo problema anche mentre ho utilizzato il seguente codice:

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

ma quando cancello lo spazio vuoto del "Titolo della finestra" il codice seguente funziona:

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

Questo è stato molto utile. Ho finito per sostituire i miei spazi con _. Stupido IE!
MrGlass

2

Ciao usando il seguente codice funziona ...

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

In precedenza ho inserito like

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

Significa che Microsoft non ti consente di inserire il nome della finestra in cui dovrebbe essere vuoto window.open funzione ...

Grazie, Nilesh Pangul


Questo non è corretto, può essere vuoto ma non deve essere vuoto.
Jimmy Bosse

2

Per me il problema era con un trattino "-" nel campo del nome della finestra. Ho rimosso i trattini e IE non ha errori e infatti apre la finestra.


1

Cosa rappresenta la posizione quattro, quella che ha "falso" come valore? Non dovrebbe essere falso, (cioè senza virgolette?). È possibile che le versioni precedenti di IE costringano la stringa a diventare un booleano, ma quelle più recenti no.


Ho rimosso le virgolette, ma non era la fonte del problema per IE8.
benc

1

Le risposte qui sono corrette in quanto IE non supporta gli spazi quando si imposta il titolo in window.open (), nessuno sembra offrire una soluzione alternativa.

Ho rimosso il titolo dalla mia chiamata window.open (puoi usare null o '') e hten ha aggiunto quanto segue alla pagina che viene aperta:

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

Non è l'ideale in alcun modo, ma questo ti permetterà di impostare il titolo come preferisci in tutti i browser.


0

Prova a rimuovere l'ultimo argomento. Oltre a questo, assicurati che urlstring, wname e wfeatures esistano.


0

Ho scoperto lo stesso problema e dopo aver letto la prima risposta che supponeva che il problema fosse causato dal nome della finestra, l'ho cambiato: prima in '_blank', che funzionava bene (sia compatibilità che visualizzazione normale), poi al valore precedente, solo meno lo spazio nel valore :) - ha funzionato anche. IMO, il problema (o parte di esso) è causato dal fatto che IE non è in grado di utilizzare un normale valore di stringa come wname. Spero che questo aiuti se qualcuno si imbatte nello stesso problema.


0

Se vuoi usare il nome di una nuova finestra ecc. Pubblicando un modulo in questa finestra, allora la soluzione, che funziona in 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

Sembra che anche quando si utilizza un nome di finestra personalizzato "valido" (non _blank, ecc.) Utilizzando window.open per avviare una nuova finestra, ci siano ancora problemi. Funziona bene la prima volta che si fa clic sul collegamento, ma se si fa nuovamente clic su di esso (con la prima finestra avviata ancora aperta) si riceve un debug dello script "Errore: nessuna interfaccia supportata".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.