ie8 var w = window.open () - "Pesan: Argumen tidak valid".

113

Saya memiliki situs yang memiliki masalah khusus IE8:

Kodenya adalah:

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

Kesalahannya adalah:

Pesan: Argumen tidak valid.
Baris: 419 Karakter: 5
Kode: 0
URI: http: //HOSTNAME/js_context.js

Saya telah mengonfirmasi nomor baris kode ("Baris" dan "URI" sudah benar), dan saya mengerti di versi IE8 yang lebih baru, ini dianggap akurat.

Saya telah memeriksa semua parameter yang masuk dalam panggilan dengan membuang peringatan, dan semuanya terlihat valid.

Masalah ini tidak terjadi di FF (mungkin 3).

MEMPERBARUI:

Masalahnya tampaknya dalam menggunakan menetapkan hasil window.open () saat melakukan "var w". Ketika saya membagi baris menjadi dua pernyataan itu berfungsi di IE8.

UPDATE2:

Berdasarkan:

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

Jika suatu fungsi akan dipanggil segera, seluruh ekspresi pemanggilan harus dibungkus dalam tanda kurung sehingga jelas bahwa nilai yang dihasilkan adalah hasil dari fungsi dan bukan fungsi itu sendiri.

Ini tidak persis apa yang terjadi di sini, tetapi saya menemukan bahwa menerapkan prinsip memecahkan masalah, dalam mode kompatibilitas IE8.

var w = (window.open(urlstring, wname, wfeatures, false));
benc
sumber
Saya memiliki masalah yang sama, dan postingan David adalah jawaban terbaik. Terima kasih atas kiriman Anda dan atas bantuan David.
Ervin

Jawaban:

251

Ini adalah postingan lama tapi mungkin masih berguna untuk seseorang.

Saya mendapat pesan kesalahan yang sama. Pada akhirnya masalahnya adalah nama yang tidak valid untuk argumen kedua, yaitu, saya memiliki baris seperti:

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

Masalahnya adalah 'judul jendela' karena tidak valid. Ini bekerja dengan baik dengan baris berikut:

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

Bahkan, membaca dengan cermat saya menyadari bahwa Microsoft tidak mendukung nameargumen kedua. Saat Anda melihat halaman dokumentasi resmi , Anda melihat bahwa Microsoft hanya mengizinkan argumen berikut, Jika menggunakan argumen itu sama sekali:

  • _kosong
  • _media
  • _induk
  • _Cari
  • _diri
  • _puncak
Stefan
sumber
1
Saya rasa saya telah lalai untuk memeriksa penjelasan Mozilla tentang fungsi ini, karena saya (penanya) fokus pada kerusakan hanya pada IE8.
benc
2
sederhananya: developer.mozilla.org/en/DOM/window.open -> "strWindowName tidak menentukan judul jendela baru."
benc
33
Saya juga mengalami kesalahan ini di IE ketika nama windows saya memiliki tanda hubung "-" pada nama seperti "my-windowname", kualitas IE tidak pernah berhenti membuat saya takjub.
Matt Palmerlee
1
Halaman dokumentasi MSDN yang Anda tautkan ke menyatakan "Opsional. String yang menentukan nama jendela.", Yang terdengar bagi saya seperti Anda harus dapat menggunakan kata kunci apa pun selain argumen yang Anda cantumkan di atas.
James McMahon
3
Ia bekerja di IE8 dengan nama seperti ImageDisplay1234 tetapi tidak bekerja dengan Image-Display-1234
boatcoder
78

IE pilih-pilih tentang argumen nama jendela. Itu tidak menyukai spasi, tanda hubung, atau tanda baca lainnya.

prlafferty
sumber
3
atau titik atau setrip atau mungkin tanda baca lainnya
boatcoder
Terima kasih ini sangat membantu .. benar-benar benci IE 6-10
Dilip Godhani
16

Saat Anda memanggil window.opendi IE, argumen kedua (nama jendela) harus berupa salah satu string target yang telah ditentukan sebelumnya atau string, yang memiliki bentuk pengenal yang valid di JavaScript.

Jadi apa yang berfungsi di Firefox: "Job Directory 9463460", tidak berfungsi di Internet Exploder, dan harus diganti dengan: "Job_Directory_9463460" misalnya (tanpa spasi, tanpa tanda minus, tanpa titik, harus menjadi pengenal yang valid) .

Tn. Napik
sumber
Terima kasih .. ini membantu saya .. Saya memiliki tanda hubung (-) di nama jendela saya
delux247
8

masalahnya mungkin wname, coba gunakan salah satu dari yang ditunjukkan pada tautan di atas, saya kutip:

Pilihan. String yang menentukan nama jendela. Nama ini digunakan sebagai nilai untuk atribut TARGET pada formulir atau elemen jangkar.

  • _blank SURL dimuat ke jendela baru tanpa nama.
  • _media Url dimuat di Media Bar di Microsoft Internet Explorer 6. Microsoft Windows XP Service Pack 2 (SP2) dan yang lebih baru. Fitur ini tidak lagi didukung. Secara default, url dimuat ke jendela atau tab browser baru.
  • _parent SURL dimuat ke induk frame saat ini. Jika bingkai tidak memiliki induk, nilai ini bertindak sebagai nilai _self.
  • _search Dinonaktifkan di Windows Internet Explorer 7, lihat Keamanan dan Kompatibilitas di Internet Explorer 7 untuk detailnya. Jika tidak, sURL dibuka di panel pencarian browser di Internet Explorer 5 atau yang lebih baru.
  • _self Dokumen saat ini diganti dengan sURL yang ditentukan.
  • _top sURL menggantikan semua rangkaian bingkai yang mungkin dimuat. Jika tidak ada rangkaian bingkai yang ditentukan, nilai ini bertindak sebagai nilai _self.

jika menggunakan wname lain, window.open tidak akan dijalankan ...

Joaquin
sumber
5
Pernyataan terakhir itu tidak benar. Anda juga dapat (a) menentukan nama bingkai yang ada untuk memuat halaman dalam bingkai itu, (b) menentukan nama "jendela bernama" yang ada untuk memuat halaman di sana, atau (c) menentukan nama yang tidak ' t ada untuk membuat "jendela bernama".
Ben Blank
Saya memiliki masalah yang sama kecuali saya tidak mengatur hasil window.open ke variabel. Memiliki judul halaman dalam variabel wname. Menggantinya menjadi '_blank' dan memperbaiki masalah.
Derek White
Apa yang saya persempit adalah tidak menyertakan - atau. Ketika saya menghilangkan tanda baca Image-Display-1234 -> ImageDisplay1234 maka semuanya baik-baik saja.
pembuat perahu
1
Untuk mendukung argumen Ben, inilah yang MSDN katakan tentang parameter kedua window.open: "String yang menentukan nama jendela. Nama ini digunakan sebagai nilai untuk atribut TARGET pada formulir atau elemen jangkar." Dan ini adalah dokumen atribut TARGET: msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx . Ini dengan jelas mengatakan bahwa target dapat berupa string arbitrer dan bukan hanya nilai yang tercantum dalam jawaban ini.
niaher
5

Sebenarnya sebuah nama dapat digunakan namun tidak boleh memiliki spasi jadi window.open("../myPage","MyWindows",...)seharusnya berfungsi tanpa masalah ( window.open ).

oliver
sumber
4

Saya juga mengalami masalah ini saat saya menggunakan kode berikut:

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

tetapi ketika saya menghapus ruang kosong dari "Judul jendela" , kode di bawah ini berfungsi:

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes');
Raymond
sumber
Ini sangat membantu. Akhirnya mengganti spasi saya dengan _. IE bodoh!
MrGlass
2

Hai menggunakan kode berikut ini berfungsi ...

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

Sebelumnya saya Masuk suka

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

Berarti Microsoft tidak mengizinkan Anda memasukkan nama jendela itu harus kosong dalam window.openfungsi ...

Terima kasih, Nilesh Pangul

Nilesh Pangul
sumber
Ini salah, ini bisa kosong tapi tidak harus kosong.
Jimmy Bosse
2

Bagi saya masalahnya adalah dengan tanda hubung "-" di bidang nama jendela. Saya menghapus tanda hubung dan IE tidak keluar kesalahan dan sebenarnya membuka jendela.

iohans
sumber
1

Apa yang direpresentasikan oleh posisi empat, yang memiliki nilai 'salah'? Bukankah seharusnya itu salah, (yaitu tanpa tanda kutip?). Ada kemungkinan bahwa versi IE sebelumnya akan memaksa string menjadi boolean, tetapi yang lebih baru tidak.

x0n
sumber
Saya menghapus tanda kutip, tetapi itu bukan sumber masalah untuk IE8.
benc
1

Jawaban di sini benar karena IE tidak mendukung spasi saat menyetel judul di window.open (), sepertinya tidak ada yang menawarkan solusi.

Saya menghapus judul dari panggilan window.open saya (Anda dapat menggunakan null atau ''), dan hten menambahkan yang berikut ini ke halaman yang sedang dibuka:

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

Tidak ideal dengan cara apa pun, tetapi ini memungkinkan Anda menyetel judul menjadi apa pun yang Anda inginkan di semua browser.

MrGlass
sumber
0

Coba hapus argumen terakhir. Selain itu, pastikan urlstring, wname, dan wfeatures ada.

Macha
sumber
0

Saya menemukan masalah yang sama dan setelah membaca jawaban pertama yang mengira masalahnya disebabkan oleh nama jendela, mengubahnya: pertama menjadi '_blank', yang berfungsi dengan baik (kompatibilitas dan tampilan reguler), lalu ke nilai sebelumnya, hanya minus ruang di nilai :) - juga bekerja. IMO, masalah (atau bagian darinya) disebabkan oleh IE tidak dapat menggunakan nilai string normal sebagai wname. Semoga ini bisa membantu jika ada yang mengalami masalah yang sama.


sumber
0

Jika Anda ingin menggunakan nama jendela baru dll memposting formulir ke jendela ini, maka solusinya, yang berfungsi di 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
sumber
0

Tampaknya meskipun menggunakan nama jendela khusus yang "valid" (bukan _blank, dll.) Menggunakan window.open untuk meluncurkan jendela baru, masih ada masalah. Ini berfungsi dengan baik saat pertama kali Anda mengeklik tautan, tetapi jika Anda mengekliknya lagi (dengan jendela pertama yang diluncurkan masih terbuka) Anda menerima debug skrip "Galat: Tidak ada antarmuka yang didukung".

Vince
sumber