27

पूर्व शर्त:IE9 iframe में स्क्रिप्ट लोड करते समय अपवाद फेंकता है। क्यूं कर?

मेरे पास आईफ़्रेम के साथ एक एएसपीएक्स-पेज है। यह iframe उसी साइट पर एमवीसी द्वारा संचालित यूआरएल को इंगित करता है (यह हाइब्रिड साइट, मानक एएसपी.नेट और एएसपी.नेट एमवीसी दोनों) है। एमवीसी द्वारा प्रदत्त परिणामी पृष्ठ में कई स्क्रिप्ट संदर्भ हैं।

समस्या:

IE9 हर एक स्क्रिप्ट यह iframe में लोड पर एक अपवाद फेंकता है। ये अपवाद इस के समान हैं:

Error: 'Function' is undefined 

यही कहता है कि हर खिड़की की सबसे बुनियादी चीजें किसी भी तरह अनुपस्थित हैं। इन पॉपअप के माध्यम से क्लिक करने के बाद, पृष्ठ बस डिज़ाइन के रूप में काम करता है!
यदि मैं सीधे ब्राउज़र में <iframe /> स्रोत विशेषता से एक यूआरएल लोड करता हूं, तो सब कुछ अपेक्षित काम करता है।
यदि मैं किसी अन्य ब्राउज़र में पृष्ठ खोलता हूं (मैंने ओपेरा, फ़ायरफ़ॉक्स की कोशिश की), सबकुछ अपेक्षित काम करता है - कोई त्रुटि नहीं।

तो, आईई 9 क्या चाहता है?

+0

जो भी आईई 9 चाहता है उसे छोड़ना छोड़ दिया जाएगा, इस तथ्य के आधार पर कि हम * कोड * चाहते हैं और त्रुटि संदेश पिन *। – Jon

+1

"फ़ंक्शन" में जावास्क्रिप्ट में पूंजी एफ नहीं है। क्या यह समस्या है? –

+2

संख्या [फ़ंक्शन ग्लोबल ऑब्जेक्ट] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function) –

उत्तर

27

वहाँ this msdn page इस बग (या सुविधा) के बारे में है:

इसके अलावा इस सवाल को देखते हैं।

जब आप डोम में आईफ्रेम तत्व को स्थानांतरित करते हैं तो आपको इन प्रकार की त्रुटियां मिलती हैं। ऐसे मामलों में, आईई 9 कचरा आईफ्रेम एकत्र करता है (आपकी अपरिभाषित बग का कारण बनता है) और इसे दूसरी स्थिति में फिर से लोड करता है।

सामान्य तौर पर, आप तत्व बनाना चाहिए, इसके src विशेषता निर्धारित केवल एक बार और फिर डोम पेड़ में कहीं रख दिया एक बार। कोड के साथ इसका कोई लेना-देना नहीं है जो आईफ्रेम में ही चलता है।

+0

+1 - मुझे यह सटीक समस्या पांच घंटे पहले नहीं थी, और "काम करने" और "काम नहीं कर रहे" के बीच मैंने जो कुछ भी बदल दिया, वह कोड का एक छोटा सा कोड है जो डोम में आईफ्रेम ले जाया गया है। कोड के उस बिट को हटाने से समस्या ठीक हो गई (और मैंने उसी प्रभाव को उत्पन्न करने के लिए जेड-इंडेक्स का उपयोग किया)। –

+0

इसी पोस्ट को इस पोस्ट पर मिला: http://stackoverflow.com/questions/5514973/javascript-code-in-iframes-in-ie9-not-working – ERR0

+0

मैं छुट्टी पर रहा हूं इसलिए जल्द ही प्रतिक्रिया नहीं दे सका, लेकिन यह संबंधित प्रतीत होता है। हालांकि प्रभावित क्षेत्रों में यह कहता है कि यह आईई 8 से आईई 9 में बदल दिया गया है, लेकिन मैंने आईई 8 में लापता एपीआई व्यवहार भी देखा है ... अभी भी बक्षीस के साथ बधाई देता है! :) –

2

मुझे जंगली में इसी स्थिति का सामना करना पड़ा है। बेसिक लक्षण:

  • आप एक iframe
  • में लोड स्क्रिप्ट कोड स्क्रिप्ट कोड जल्दी (सिर अनुभाग या शरीर के ऊपर से) चलाता है
  • आईई के बारे में कुछ याद आ रही देशी वस्तु शिकायत

मैंने पाया कि इसे अक्सर ऑनलोड या DOMContentLoaded तक स्क्रिप्ट कोड के निष्पादन में देरी से रोका जा सकता है ... मुझे बहुत मदद नहीं है, लेकिन यह सबसे मुश्किल आईई स्क्रिप्टिंग बग्स में से एक है जिसे मैंने कभी सामना किया है। मैंने आपके प्रश्न का स्कोर बढ़ाया, उम्मीद है कि यह दूसरों द्वारा भी मिलेगा और हम एक और विस्तृत उत्तर प्राप्त कर सकते हैं। Error in Internet Explorer 9 (not earlier versions or other browsers) when including jQuery in an iframe

1

पूर्ण वेब पेज लोड होने के बाद अंत में जावास्क्रिप्ट लोड करने का प्रयास करें। मुझे लगता है कि आईफ्रेम पूरी तरह से लोड होने से पहले भी स्क्रिप्ट निष्पादित हो रही है।

IE9 में पटकथा के कुछ सुझाव के लिए

iFrame HTML < सिर > के शीर्ष पर निम्न स्क्रिप्ट ब्लॉक रखने मेरे मामले में समस्या को हल करने लगता है नीचे http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx

2

दिए गए लिंक देखें। असल में, यह iframe को पुनः लोड करने के लिए मजबूर करता है, जैसा कि कुछ ने इंगित किया है, इस मुद्दे को हल करता है।यह अपेक्षाकृत सुरक्षित लगता है, क्योंकि, 'ऑब्जेक्ट' और 'डेट' जैसी चीज़ों के बिना, जावास्क्रिप्ट अनिवार्य रूप से बेकार है।

<script type="text/javascript"> 
    if(typeof(Object)==="undefined"){ 
     window.location.reload(); 
    } 
</script> 
1

आगे की जांच से पता चला कि समाधान यह 'src' विशेषता सेट करने से पहले डोम स्थान है पहुंचाने वाला आइफ्रेम जोड़ना है।

एक बार 'src' सेट हो जाने के बाद, डोम स्टैक के भीतर आईफ़्रेम के स्थान को बदलने से आईई 9 को कचरा इकट्ठा किया जाता है।

एक बार 'src' सेट हो जाने पर, iframe का आकार बदल सकता है और सीएसएस स्थिति के माध्यम से बदला जा सकता है, लेकिन डोम स्टैक में संबंधित स्थान नहीं बदल सकता है।

अक्सर बार, संवाद और लाइटबॉक्स जैसे प्लगइन पहले से ही डोम में सेट किए गए स्रोत के साथ एक आईफ्रेम भरेंगे, फिर जीसी को शुरू करने के लिए प्रेरित/प्रीपेन्ड या जो कुछ भी हो।

0
function waitForjQuery(){ 
    if(typeof jQuery!='undefined'){ 
     //Do yor stuff! 
    } 
    else{ 
     setTimeout(function(){ 
      waitForjQuery(); 
     },500); 
    } 
} 
waitForjQuery(); 
+1

असम्बद्ध कोड वास्तव में उपयोगी नहीं है। –

+1

यह प्रश्न का उत्तर कैसे देता है? यह सवाल पर भी लागू नहीं होता है – JoseM