ie8 var w = window.open () - "Mesaj: Geçersiz bağımsız değişken."


113

Yalnızca IE8 sorunu olan bir sitem var:

Kod:

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

Hata şudur:

Mesaj: Geçersiz bağımsız değişken.
Satır: 419 Karakter: 5
Kod: 0
URI: http: //HOSTNAME/js_context.js

Kodun satır numarasını onayladım ("Satır" ve "URI" doğru) ve IE8'in sonraki sürümlerinde bunun doğru olarak kabul edildiğini anlıyorum.

Uyarıları atarak aramadaki tüm gelen parametreleri kontrol ettim ve hepsi geçerli görünüyor.

Bu sorun FF'de olmaz (muhtemelen 3).

GÜNCELLEME:

Sorun, "var w" yapılırken window.open () sonucunu atamaktan kaynaklanıyor gibi görünüyor. Satırı iki ifadeye böldüğümde IE8'de çalışıyor.

Update2:

Dayalı:

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

Bir fonksiyon hemen çağrılacağı zaman, tüm çağrı ifadesi parantez içine alınmalıdır, böylece üretilen değer fonksiyonun kendisinin değil fonksiyonun sonucudur.

Bu tam olarak burada olan şey değil, ancak ilkeyi uygulamanın IE8'in uyumluluk modunda sorunu çözdüğünü buldum.

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

Ben de aynı sorunu yaşadım ve David'in gönderisi en iyi cevap. Gönderiniz ve David'in yardımı için teşekkür ederiz.
Ervin

Yanıtlar:


251

Bu eski bir gönderidir, ancak yine de birisi için yararlı olabilir.

Aynı hata mesajını aldım. Sonunda problem ikinci argüman için geçersiz bir isimdi, yani şöyle bir satırım vardı:

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

Sorun, geçerli olmadığı için "pencere başlığı" idi. Aşağıdaki satırla iyi çalıştı:

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

Aslında dikkatlice okurken Microsoft'un nameikinci bir argümanı desteklemediğini fark ettim . Resmi belgeler sayfasına baktığınızda, Microsoft'un yalnızca aşağıdaki bağımsız değişkenlere izin verdiğini görüyorsunuz, Bu bağımsız değişkeni kullanılıyorsa:

  • _boş
  • _media
  • _parent
  • _arama
  • _self
  • _üst

1
Sanırım bu işlevin Mozilla açıklamasını kontrol etmeyi ihmal ettim, çünkü ben (asker) yalnızca IE8 kırılmasına odaklanmıştım.
bank

2
basitçe söylemek gerekirse: developer.mozilla.org/en/DOM/window.open -> "strWindowName yeni pencerenin başlığını belirtmiyor."
bank

33
IE'de bu hatayı, Windows adımda "my-windowname" gibi bir adda bir tire "-" olduğunda da yaşadım, IE kalitesi beni şaşırtmayı asla bırakmıyor.
Matt Palmerlee

1
Bağlandığınız MSDN dokümantasyon sayfasında, yukarıda listelediğiniz bağımsız değişkenlerin yanı sıra herhangi bir anahtar sözcüğü kullanabilmeniz gerektiğini düşündüğünüz "Pencerenin adını belirten İsteğe Bağlı. Dize."
James McMahon

3
IE8'de ImageDisplay1234 gibi isimlerle çalışır ancak Image-Display-1234 ile çalışmaz
boatcoder

78

IE, pencere adı argümanı konusunda seçici. Boşlukları, kısa çizgileri veya diğer noktalama işaretlerini sevmez.


3
veya noktalar veya çizgiler veya belki başka noktalama işaretleri
boatcoder

Teşekkürler, bu yardımcı oluyor .. IE
6-10'dan gerçekten

16

window.openIE'de arama yaptığınızda , ikinci bağımsız değişken (pencere adı) önceden tanımlanmış hedef dizelerden biri veya JavaScript'te geçerli bir tanımlayıcı formuna sahip bir dize olmalıdır .

"İş Dizini 9463460": Peki Firefox'ta çalışmaktadır değil , Internet Explorer'ın iş ve tarafından değiştirilmesi gerekir: (geçerli bir tanımlayıcı olmalı, boşluk, hiçbir eksi işaretlerini, hiçbir noktalar) örneğin "Job_Directory_9463460" .


Teşekkürler .. bu bana yardımcı oldu .. Pencere
adımda

8

sorun wname olabilir, yukarıdaki bağlantıda gösterilenlerden birini kullanmayı deneyin, alıntı yapıyorum:

İsteğe bağlı. Pencerenin adını belirten dize. Bu ad, bir form veya bağlantı öğesindeki TARGET özniteliğinin değeri olarak kullanılır.

  • _blank sURL yeni, adsız bir pencereye yüklenir.
  • _media URL, Microsoft Internet Explorer 6'da Medya Çubuğuna yüklenir. Microsoft Windows XP Service Pack 2 (SP2) ve sonraki sürümler. Bu özellik artık desteklenmemektedir. Varsayılan olarak url yeni bir tarayıcı penceresine veya sekmesine yüklenir.
  • _parent sURL, geçerli çerçevenin üst öğesine yüklenir. Çerçevenin üst öğesi yoksa, bu değer _self değeri olarak hareket eder.
  • _search Windows Internet Explorer 7'de devre dışı bırakıldı, ayrıntılar için Internet Explorer 7'de Güvenlik ve Uyumluluk konusuna bakın. Aksi takdirde, sURL, Internet Explorer 5 veya sonraki sürümlerde tarayıcının arama bölmesinde açılır.
  • _self Mevcut belge, belirtilen sURL ile değiştirilir.
  • _top sURL, yüklenebilecek tüm çerçeve kümelerinin yerini alır. Tanımlanmış çerçeve kümesi yoksa, bu değer _self değeri gibi davranır.

başka bir wname kullanılıyorsa, window.open çalışmaz ...


5
Bu son ifade doğru değil. Ayrıca (a) sayfayı o çerçeveye yüklemek için mevcut bir çerçevenin adını belirtebilir, (b) sayfayı oraya yüklemek için mevcut bir "adlandırılmış pencerenin" adını belirtebilir veya (c) olmayan bir ad belirtebilirsiniz. t "adlandırılmış pencere" oluşturmak için mevcut değildir.
Ben Blank

Window.open'ın sonucunu bir değişkene ayarlamam dışında aynı problemi yaşadım. Wname değişkeninde bir sayfa başlığı vardı. "_Blank" olarak değiştirildi ve sorunu çözdü.
Derek White

Onu daralttığım şey dahil etmemek oldu - veya. Image-Display-1234 -> ImageDisplay1234 noktalama işaretinden kurtulduğumda her şey yolundaydı.
boatcoder

1
Ben'in argümanını desteklemek için, MSDN, window.open'in 2. parametresi hakkında söylediği şeydir: "Pencerenin adını belirten dize. Bu ad, bir form veya bağlantı öğesindeki TARGET özniteliğinin değeri olarak kullanılır." Ve işte TARGET öznitelik belgesi: msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx . Açıkça, hedefin sadece bu cevapta listelenen değerler değil, keyfi bir dize olabileceğini söylüyor.
niaher

5

Aslında bir isim kullanılabilir ancak boşluk içermemelidir, bu nedenle window.open("../myPage","MyWindows",...)sorunsuz çalışmalıdır ( window.open ).


4

Aşağıdaki kodu kullanırken de bu sorunu karşılıyorum:

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

ancak "Pencere başlığı" nın boş alanını sildiğimde aşağıdaki kod çalışıyor:

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

Bu çok yardımcı oldu. Boşluklarımı _ ile değiştirerek sona erdi. Aptal IE!
MrGlass

2

Merhaba aşağıdaki kodu kullanarak çalışıyor ...

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

Daha önce gibi girdim

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

Microsoft'un pencere adını girmenize izin vermediği anlamına gelir, boş bırakılmalıdır window.open işlevde ...

Teşekkürler, Nilesh Pangul


Bu yanlıştır, boş olabilir ancak boş bırakılması gerekmez.
Jimmy Bosse

2

Benim için sorun, pencere adı alanında bir tire "-" idi. Çizgileri kaldırdım ve IE hata vermiyor ve aslında pencereyi açıyor.


1

Dördüncü konum neyi temsil ediyor, değeri 'yanlış'a sahip olan mı? Bunun yanlış olması gerekmez (yani tırnak işaretleri olmadan?). IE'nin önceki sürümlerinin dizeyi bir mantıksal değere zorlaması mümkündür, ancak yeni sürümler bunu yapmaz.


Alıntıları kaldırdım, ancak IE8 için sorunun kaynağı bu değildi.
benc

1

IE, window.open () içinde başlık ayarlarken boşlukları desteklemediği için buradaki yanıtlar doğrudur, hiçbiri bir geçici çözüm sunmamaktadır.

Başlığı window.open çağrımdan kaldırdım (null veya '' kullanabilirsiniz) ve açılan sayfaya aşağıdakileri ekledim:

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

Hiçbir şekilde ideal değildir, ancak bu, başlığı tüm tarayıcılarda istediğiniz gibi ayarlamanıza olanak tanır.


0

Son argümanı kaldırmayı deneyin. Bunun dışında urlstring, wname ve wfeatures'ın mevcut olduğundan emin olun.


0

Aynı sorunu keşfettim ve sorunun pencere adından kaynaklandığını varsayan ilk cevabı okuduktan sonra değiştirdim: önce iyi çalışan '_blank' (hem uyumluluk hem de normal görünüm), sonra önceki değere, sadece eksi değerdeki boşluk :) - ayrıca çalıştı. IMO, sorun (veya bir kısmı), IE'nin wname olarak normal bir dize değerini kullanamamasından kaynaklanır. Umarım bu aynı problemle karşılaşan olursa yardımcı olur.


0

Bu pencereye bir form gönderen yeni pencerenin adını kullanmak istiyorsanız, IE, FF, Chrome'da çalışan çözüm:

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

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

      ...

0

Görünüşe göre yeni bir pencere başlatmak için window.open kullanıldığında "geçerli" bir özel pencere adı (_blank, vb. Değil) kullanıldığında, hala sorunlar var. Bağlantıya ilk tıkladığınızda iyi çalışır, ancak tekrar tıklarsanız (ilk başlatılan pencere hala yukarıdayken) "Hata: Böyle bir arabirim desteklenmiyor" komut dosyası hata ayıklaması alırsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.