ie8 var w = window.open () - „Message: Invalid argument.”

113

Mam witrynę, w której występuje problem tylko z przeglądarką IE8:

Kod to:

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

Błąd:

Wiadomość: nieprawidłowy argument.
Wiersz: 419 Znak: 5
Kod: 0
URI: http: // NAZWA HOSTA/js_context.js

Potwierdziłem numer linii kodu („Linia” i „URI” są poprawne) i rozumiem, że w późniejszych wersjach IE8 jest to uważane za poprawne.

Sprawdziłem wszystkie parametry przychodzące w wywołaniu przez zrzucanie alertów i wszystkie wyglądają na prawidłowe.

Ten problem nie występuje na FF (prawdopodobnie 3).

AKTUALIZACJA:

Wydaje się, że problem polega na przypisaniu wyniku funkcji window.open () podczas wykonywania polecenia „var w”. Kiedy podzielę linię na dwie instrukcje, działa to w IE8.

UPDATE2:

Oparte na:

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

Gdy funkcja ma zostać wywołana natychmiast, całe wyrażenie wywołania powinno być opakowane w pareny, aby było jasne, że tworzona wartość jest wynikiem funkcji, a nie samej funkcji.

Nie jest to dokładnie to, co się tutaj dzieje, ale stwierdziłem, że zastosowanie zasady rozwiązało problem w trybie zgodności IE8.

var w = (window.open(urlstring, wname, wfeatures, false));
benc
źródło
Miałem ten sam problem, a post Davida jest najlepszą odpowiedzią. Dziękuję za wiadomość i pomoc Davida.
Ervin,

Odpowiedzi:

251

To jest stary wpis, ale może nadal dla kogoś przydatny.

Miałem ten sam komunikat o błędzie. Ostatecznie problemem była nieprawidłowa nazwa drugiego argumentu, czyli miałem linię taką jak:

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

Problem dotyczył „tytułu okna”, ponieważ jest on nieprawidłowy. Działało dobrze z następującą linią:

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

Faktycznie, uważnie czytając zdałem sobie sprawę, że Microsoft nie popiera namedrugiego argumentu. Kiedy spojrzysz na oficjalną stronę dokumentacji , zobaczysz, że Microsoft dopuszcza tylko następujące argumenty, jeśli w ogóle używasz tego argumentu:

  • _pusty
  • _głoska bezdźwięczna
  • _rodzic
  • _Szukaj
  • _samego siebie
  • _Top
Stefan
źródło
1
Wydaje mi się, że zapomniałem sprawdzić wyjaśnienie tej funkcji w Mozilli, ponieważ ja (asker) skupiłem się na uszkodzeniach tylko w IE8.
benc
2
po prostu: developer.mozilla.org/en/DOM/window.open -> „strWindowName nie określa tytułu nowego okna”.
benc
33
Miałem też ten błąd w IE, kiedy nazwa mojego okna miała myślnik "-" w nazwie takiej jak "moja-nazwa-okna", jakość IE nigdy nie przestaje mnie zadziwiać.
Matt Palmerlee
1
Strona dokumentacji MSDN, do której utworzono łącze, zawiera tekst „Opcjonalny. Ciąg określający nazwę okna”, co wydaje mi się, że powinno być możliwe użycie dowolnego słowa kluczowego poza argumentami wymienionymi powyżej.
James McMahon
3
Działa w IE8 z nazwami takimi jak ImageDisplay1234, ale nie działa z Image-Display-1234
boatcoder
78

IE jest wybredny, jeśli chodzi o argument nazwy okna. Nie lubi spacji, myślników ani innych znaków interpunkcyjnych.

prlafferty
źródło
3
lub kropki lub myślniki, a może inna interpunkcja
boatcoder
Dzięki, to jest
pomocne ... naprawdę
16

Kiedy wywołujesz window.openw IE, drugi argument (nazwa okna) musi być albo jednym z predefiniowanych łańcuchów docelowych, albo łańcuchem, który ma postać prawidłowego identyfikatora w JavaScript.

Więc to, co działa w Firefoksie: „Job Directory 9463460”, nie działa w Internet Exploder i musi zostać zastąpione na przykład: „Job_Directory_9463460” (bez spacji, bez znaków minus, bez kropek, musi to być prawidłowy identyfikator) .

Panie Napik
źródło
Dzięki… to mi pomogło… W nazwie mojego okna
pojawiły się
8

problemem może być nazwa, spróbuj użyć jednej z tych pokazanych w powyższym linku, cytuję:

Opcjonalny. Ciąg określający nazwę okna. Ta nazwa jest używana jako wartość atrybutu TARGET w formularzu lub elemencie kotwicy.

  • _blank Adres sURL jest ładowany do nowego, nienazwanego okna.
  • _media Adres URL jest ładowany na pasku multimediów w przeglądarce Microsoft Internet Explorer 6. Microsoft Windows XP z dodatkiem Service Pack 2 (SP2) i nowszym. Ta funkcja nie jest już obsługiwana. Domyślnie adres URL jest ładowany do nowego okna lub karty przeglądarki.
  • _parent Adres sURL jest ładowany do elementu nadrzędnego bieżącej ramki. Jeśli ramka nie ma elementu nadrzędnego, ta wartość działa jako wartość _self.
  • _search Wyłączone w programie Windows Internet Explorer 7, szczegółowe informacje można znaleźć w artykule Bezpieczeństwo i zgodność w programie Internet Explorer 7. W przeciwnym razie adres sURL zostanie otwarty w okienku wyszukiwania przeglądarki w przeglądarce Internet Explorer 5 lub nowszej.
  • _self Bieżący dokument jest zastępowany określonym adresem URL.
  • _top sURL zastępuje wszystkie ładowane zestawy ramek. Jeśli nie ma zdefiniowanych zestawów ramek, ta wartość działa jako wartość _self.

jeśli używasz innej wname, window.open nie zostanie wykonane ...

Joaquin
źródło
5
To ostatnie stwierdzenie nie jest poprawne. Możesz również (a) określić nazwę istniejącej ramki, aby załadować stronę w tej ramce, (b) określić nazwę istniejącego „nazwanego okna”, aby załadować tam stronę, lub (c) określić nazwę, która nie ' nie istnieje, aby utworzyć „nazwane okno”.
Ben Blank
Miałem ten sam problem, z tym że nie ustawiałem wyniku window.open na zmienną. Miał tytuł strony w zmiennej wname. Zmieniono go na „_blank” i naprawiono problem.
Derek White
To, do czego to zawęziłem, to nie uwzględniać - lub. Kiedy pozbyłem się interpunkcji Image-Display-1234 -> ImageDisplay1234, wszystko było dobrze.
boatcoder
1
Aby wesprzeć argument Bena, MSDN mówi o drugim parametrze window.open: „Łańcuch określający nazwę okna. Ta nazwa jest używana jako wartość atrybutu TARGET w formularzu lub elemencie kotwicy”. A oto dokument atrybutu TARGET: msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx . Wyraźnie mówi, że cel może być dowolnym ciągiem, a nie tylko wartościami wymienionymi w tej odpowiedzi.
niaher
5

Właściwie można użyć nazwy, ale nie może ona zawierać spacji, więc window.open("../myPage","MyWindows",...)powinna działać bez problemu ( window.open ).

oliver
źródło
4

Spotykam się również z tym problemem, gdy użyłem następującego kodu:

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

ale kiedy usuwam puste miejsce w „tytule okna”, poniższy kod działa:

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes');
Raymond
źródło
To było bardzo pomocne. Skończyło się na zamianie moich przestrzeni na _. Głupi IE!
MrGlass
2

Cześć, używając następującego kodu, działa ...

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

Wcześniej wszedłem jak

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

Oznacza, że ​​firma Microsoft nie zezwala na wprowadzanie nazwy okna, w którym powinno być puste window.open funkcji ...

Dzięki, Nilesh Pangul

Nilesh Pangul
źródło
Jest to niepoprawne, może być puste, ale nie musi być puste.
Jimmy Bosse
2

U mnie problem był z myślnikiem „-” w polu nazwy okna. Usunąłem kreski i IE nie wyświetla błędu i faktycznie otwiera okno.

iohans
źródło
1

Co reprezentuje pozycja czwarta, która ma wartość „fałsz”? Czy nie powinno to być fałszywe (tj. Bez cudzysłowów?). Możliwe, że wcześniejsze wersje IE zmuszałyby ciąg znaków do wartości logicznej, ale nowsze nie.

x0n
źródło
Usunąłem cytaty, ale to nie było źródło problemu w IE8.
benc
1

Odpowiedzi tutaj są poprawne, ponieważ IE nie obsługuje spacji podczas ustawiania tytułu w window.open (), żadna nie wydaje się oferować obejścia.

Usunąłem tytuł z mojego wywołania window.open (możesz użyć wartości null lub „”) i często dodałem do otwieranej strony:

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

W żadnym wypadku nie jest to idealne rozwiązanie, ale pozwoli ci to ustawić dowolny tytuł we wszystkich przeglądarkach.

MrGlass
źródło
0

Spróbuj usunąć ostatni argument. Poza tym upewnij się, że istnieją funkcje urlstring, wname i wfeatures.

Macha
źródło
0

Odkryłem ten sam problem i po przeczytaniu pierwszej odpowiedzi, że przypuszczalnie przyczyną problemu jest nazwa okna, zmieniłem ją: najpierw na '_blank', co działało dobrze (zarówno zgodność jak i zwykły widok), potem na poprzednią wartość, tylko minus miejsce w wartości :) - też działało. IMO, problem (lub jego część) jest spowodowany tym, że IE nie może użyć normalnej wartości ciągu jako wname. Mam nadzieję, że to pomoże, jeśli ktoś napotka ten sam problem.


źródło
0

Jeśli chcesz użyć nazwy nowego okna itp wysyłając formularz do tego okna to rozwiązanie działające w 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
źródło
0

Wydaje się, że nawet przy użyciu „prawidłowej” nazwy niestandardowego okna (nie _blank itp.) Przy użyciu window.open do uruchomienia nowego okna, nadal występują problemy. Działa dobrze po pierwszym kliknięciu odsyłacza, ale jeśli klikniesz je ponownie (przy pierwszym uruchomionym oknie nadal będzie otwarte), pojawi się komunikat debugowania skryptu „Błąd: taki interfejs nie jest obsługiwany”.

Vince
źródło