2012-06-11 5 views
21

में टाइपिंग "अज्ञात" टाइप करने के लिए मेरे पास एक खिड़की है, जहां बंद होने से पहले मैं अंतर्निहित पृष्ठ को रीफ्रेश करता हूं।आईई

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

अगर मैं मूल उद्घाटन पेज से दूर चले गए, इस कोड को एक "अनुमति अस्वीकृत" त्रुटि फेंक होगा।

कोड डीबग करना पता चला है कि typeof(opener.Refresh)के बराबर था "अज्ञात" उम्मीद "अनिर्धारित" के बजाय

जहां तक ​​मुझे पता है हूँ "अज्ञात"typeof के लिए बदले में से एक मान नहीं है, तो कैसे और क्यों यह मान लौटा दिया जाएगा?

अतिरिक्त जानकारी

मैं करने के लिए चेक बदलकर त्रुटि से बचा:

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

हालांकि इस तरह उदाहरण (detecting-an-undefined-object-property-in-javascript) समीकरण में कारक "अज्ञात" नहीं है ।

+11

यह आईई है, आपने क्या उम्मीद की थी? – 0x499602D2

+0

'सलामी बल्लेबाज' घोषित कैसे किया जाता है? –

+0

यह घोषित नहीं किया गया है, हालांकि खिड़की एक मानक खिड़की के साथ बनाई गई है। ओपन। –

उत्तर

16

एक duplicate question at Bytes के अनुसार, typeof मूल्य unknown JScript संस्करण 8 में जोड़ा जाता है, date के साथ।

एक ब्लॉग के लिए एक comment रॉबर्ट नीमैन द्वारा भी व्याख्यात्मक होना कर सकते हैं:

इंटरनेट एक्सप्लोरर को प्रदर्शित करता है "अज्ञात" जब प्रश्न में वस्तु पर एक COM + पुल के दूसरी तरफ है। आपको यह पता नहीं हो सकता है या यह एहसास हो सकता है, लेकिन एमएस की XMLHTTP ऑब्जेक्ट एक अलग COM + ऑब्जेक्ट का हिस्सा है जो लागू करता है IU अज्ञात; जब आप इस पर विधियों को कॉल करते हैं, तो आप पर एक COM पुल और मूल जावास्क्रिप्ट को कॉल नहीं कर रहे हैं।

मूल रूप से यह एमएस का उत्तर है यदि आप का परीक्षण या एक्सेस करने का प्रयास करते हैं जो कि जेस्क्रिप्ट इंजन का सही हिस्सा नहीं है।

+0

धन्यवाद। मैंने पहले से ही उस टिप्पणी को देखा था, हालांकि मैं इसे अपने सामान्य मामला से संबंधित नहीं कर सका ... –

+0

तो सबसे अच्छा समाधान कभी भी '! ==' अपरिभाषित 'की जांच न करें और जांचें कि यह ज्ञात मूल्यों में से एक के बराबर है ? या 'इन' ऑपरेटर का उपयोग [TomaszDz] (http://stackoverflow.com/a/15152662/227299) के रूप में किया गया है? –

+0

यदि आपको वास्तव में अपरिभाषित (और ऊपर संपादित ओपी के रूप में कार्य अस्तित्व में नहीं है) की जांच करने की आवश्यकता है, तो निम्न कार्य करेंगे: (myObj.myProp === 'अपरिभाषित' टाइप करें myofb.myProp === 'अज्ञात' टाइप करें) – Bob

5

ECMAScript specification कहा गया है कि मेजबान वस्तुओं के लिए typeof ऑपरेटर की वापसी मूल्य है:

कार्यान्वयन से परिभाषित छोड़कर नहीं हो "undefined", "boolean" हो सकता है, "number", या "string" ।

मेरा मानना ​​है कि unknown मान केवल इंटरनेट एक्सप्लोरर में वापस आ गया है। दिलचस्प बात यह है MSDN यह उल्लेख नहीं है:

छह संभावित मान है कि रिटर्न typeof हैं:। "नंबर", "स्ट्रिंग," "बूलियन," "वस्तु", "समारोह," और "अपरिभाषित"

+0

क्या आपके पास कोई विचार है कि "अज्ञात" वापस आने वाले परिदृश्य क्या होंगे? –

+4

कोई विचार नहीं मुझे डर है। मुझे इसके बारे में कोई वास्तविक दस्तावेज नहीं मिल रहा है। मेजबान वस्तुओं के साथ यह समस्या है। ऐसे कोई मानक नहीं हैं, इसलिए ब्राउजर देव जो भी चाहें उतना कर सकते हैं। –

+1

@ ब्रेटपोस्टिन ['window.external'] में 'typeof ==' अज्ञात 'का एक बहुत सारे (http://msdn.microsoft.com/en-us/library/ie/ms535246 (v = vs.85) .aspx) उदाहरण के लिए 'typeof window.external.AutoScan' या' window.external.CreateAuthorizationHeader' –

7

in ऑपरेटर का प्रयास करें। मुझे एक ही समस्या थी (एप्लेट के साथ) और मैंने इसे in का उपयोग करके हल किया:

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

अरे, धन्यवाद! बहुत अच्छा सुझाव है। –