Soru IE'de “bilinmeyen” geri dönen tip


Pencerem var, kapatılmadan önce altta yatan sayfayı yeniliyorum.

if(opener && typeof(opener.Refresh) != 'undefined')
{
    opener.Refresh();
}

Orijinal açılış sayfasından uzaklaşırsam, bu kod "İzin reddedildi" hata.

Kod hata ayıklama olduğunu ortaya çıkardı typeof(opener.Refresh) eşitti "Bilinmeyen" beklenen yerine "Tanımsız".

Bildiğim kadarıyla "Bilinmeyen" için dönüş değerlerinden biri değil typeof, öyleyse bu değer nasıl ve neden geri dönecek?

Daha fazla bilgi

Denetimi değiştirerek hatayı engelledim:

if(opener && typeof(opener.Refresh) == 'function')

Ancak bunun gibi örnekler (tespit-bir-tanımlanmamış-nesne-özellik-içinde-JavaScript) denklemin "bilinmeyen "ini etkilemiyor gibi görünmektedir.


21
2018-06-11 15:04


Menşei


IE, ne bekliyordun? - 0x499602D2
Nasıl opener beyan? - Marcel Korpel
Bildirilmemiş, ancak pencere standart bir window.open ile oluşturuldu. - Brett Postin


Cevaplar:


Göre Bayt'ta yinelenen soru, typeof değeri unknown ile birlikte JScript sürüm 8'e eklenir date.

bir yorum Yap Robert Nyman tarafından bir bloga da açıklayıcı olabilir:

Söz konusu nesne açıkken Internet Explorer “bilinmeyen” mesajını görüntüler   COM + köprüsünün diğer tarafı. Bunu bilmiyor olabilir veya farkına varmazsınız   Bu, ancak MS’nin XMLHTTP nesnesi, farklı bir COM + nesnesinin parçasıdır.   IUnknown'ı uygular; Üzerinde yöntemleri çağırdığınızda, bu şekilde biter   bir COM köprüsü ve yerel JavaScript'i çağırmamak.

Temel olarak, bir şeyi test etmeye veya erişmeye çalışırsanız bu MS’nin cevabı   Bu, JScript motorunun gerçek bir parçası değil.


18
2018-06-11 15:17



Teşekkürler. Bu yorumu daha önce görmüştüm, ancak göründüğüm basit davamla ilişkilendiremedim ... - Brett Postin
Yani en iyi çözüm asla kontrol edilmemektir !== 'undefined' ve bilinen değerlerden birine eşit olduğunu kontrol edin. Ya da in operatör olarak TomaszDz önerdi? - Juan Mendes
Eğer gerçekten tanımlanmamışlar için kontrol etmeniz gerekiyorsa (ve yukarıda OP olarak düzenlenmiş bir fonksiyon olarak işlev görmüyorsa), aşağıdakiler işe yarar: (typeof myObj.myProp === 'undefined' || typeof myObj.myProp === 'unknown') - Bob
İlk JScript 8 mevcut değil; 5.8 demek istedin mi? İkincisi nasıl olur "date" IE dışında? - Knu


Deneyin in Şebeke. Aynı problem (applet ile) vardı ve kullanarak çözdü in:

if("Refresh" in opener) {
    opener.Refresh();
}

6
2018-03-01 07:26



Hey teşekkürler! Bu harika bir öneri. - Roland Bouman


ECMAScript belirtimi ev sahibi nesneler için dönüş değerini belirtir. typeof operatör:

Uygulama tanımlı dışında tanımlanamayabilir "undefined","boolean"   "number"veya"string".

İnanıyorum unknown Internet Explorer'da yalnızca değer döndürülür. İlginçtir, MSDN bahsetmez:

Tipolojik olarak döndürülen altı olası değer vardır: "sayı", "dizgi",   "boolean", "object", "function" ve "undefined."


5
2018-06-11 15:10



"Bilinmeyen" senaryolarının hangi durumlarda iade edileceğine dair bir fikrin var mı? - Brett Postin
Korkarım ki korkuyorum. Bu konuda gerçek bir belge bulamıyorum. Bu, ana nesnelerle ilgili sorun. Standartlar yoktur, bu yüzden tarayıcı devleri istedikleri şeyi yapabilirler. - James Allardice
@BrettPostin Bir sürü typeof == 'unknown' içinde window.external Örneğin typeof window.external.AutoScan veya window.external.CreateAuthorizationHeader - Juan Mendes
MSDN şimdi bundan bahseder. - Zev Spitz