2010-05-26 23 views
6

मेरे पास एक ऐसा पृष्ठ है जो फ़ायरफ़ॉक्स में पूरी तरह से ठीक काम करता है, लेकिन आईई में एक त्रुटि फेंक रहा है। मैं jQuery को गतिशील रूप से लोड कर रहा हूं (यदि यह पहले से लोड नहीं हुआ है), और फिर jQuery (दस्तावेज़) .ready() ब्लॉक में कुछ सामान कर रहा है। हालांकि, आईई jQuery (दस्तावेज़) .ready() ब्लॉक को हिट करते समय डरावनी "ऑब्जेक्ट अपेक्षित" त्रुटि फेंकता है।आईई 7 jQuery (दस्तावेज़) .ready() समस्या

आप यहाँ पूरे पृष्ठ का कोड देख सकते हैं: http://www.pastie.org/977767

आईई सही jQuery (document) .ready में त्रुटि फेंक रहा है()।

कोई विचार क्या है कि यहां क्या हो रहा है? फिर, यह फ़ायरफ़ॉक्स में पूरी तरह से ठीक काम करता है। ऐसा लगता है कि आईई की तरह लगता है कि jQuery लोड हो गया है लेकिन यह वास्तव में अभी तक नहीं है या jQuery अभी भी लोड हो रहा है जब jQuery (दस्तावेज़) .ready() ब्लॉक का सामना करना पड़ रहा है?

उत्तर

2

जब आप दस्तावेज़ में एक स्क्रिप्ट संलग्न करते हैं, तो यह असीमित रूप से डाउनलोड होता है। आईई, निम्न स्क्रिप्ट ...

try{ 
jQuery(document).ready(function() { 
    jQuery.getScript("/CalendarViewer/js/utils.js", function(){ 
     jQuery.getScript("/CalendarViewer/js/groupcatselector.js", function(){ 
      jQuery.getScript("/CalendarViewer/js/calendarportlet.js", function(){ 
       jQuery.getScript("/CalendarViewer/js/calendarportletmain.js", function(){ 
        var cpm = calendarportletmain; 
        cpm.doEditDefaults("V_7f208bca412b42a68c19eb104bf46f14", "/CalendarViewer", groupCats_V_7f208bca412b42a68c19eb104bf46f14); 
       }); 
      }); 
     }); 
    }); 
}); 
}catch(err){ 
    alert("error in view.jsp="+err.number+" "+err.description); 
} 

में ... पार्स और क्रियान्वित किया जाता है इससे पहले कि आईई को डाउनलोड करने और jQuery स्क्रिप्ट पार्स करने समाप्त हो गया है। फ़ायरफ़ॉक्स में यह मामला नहीं हो सकता है अगर फ़ायरफ़ॉक्स पहले से ही स्क्रिप्ट को कैश कर चुका है, तो इसे डाउनलोड करने में कोई समय नहीं लगेगा और तुरंत पार्स किया जा सकता है। यह पार्सर्स अलग-अलग काम कर सकता है, फ़ायरफ़ॉक्स जितनी जल्दी डाउनलोड हो सके स्क्रिप्ट को पार्स कर रहा है और आईई धागे को निष्क्रिय होने तक पार्सिंग क्यूइंग कर रहा है।

आप इस कोड को setUpJquery फ़ंक्शन के अंत में ले जा सकते हैं, जिसका अर्थ है कि यह केवल तभी निष्पादित किया जाएगा जब jQuery ऑब्जेक्ट उपलब्ध हो। वैकल्पिक रूप से, आप कोड को अपने स्वयं के फ़ंक्शन के अंदर डाल सकते हैं और setUpJquery फ़ंक्शन से उस फ़ंक्शन को कॉल कर सकते हैं।

+0

धन्यवाद, लेकिन जो कोड आप देखते हैं वह वास्तव में कई अलग-अलग फ़ाइलों में निहित है। JQuery लोड स्क्रिप्ट का उपयोग कई अलग-अलग पृष्ठों पर किया जाता है, इसलिए मैं इसमें विशिष्ट कोड नहीं डाल सकता। क्या कोई अन्य तरीका है कि मैं jQuery (दस्तावेज़) .ready() पर एक चेक डाल सकता हूं और केवल एक बार jQuery लोड होने के बाद ही इसे संसाधित कर सकता है? – Zendog74

+0

@ ज़ेंडोग 74: आप jQuery को दस्तावेज़ का एक तुल्यकालिक हिस्सा बना सकते हैं। जोड़ने के लिए डीओएम का उपयोग करने के बजाय, 'if (typeof jQuery == "अपरिभाषित") जैसे कुछ का उपयोग करें .write (' '); '। यह सुनिश्चित करेगा कि jQuery को अन्य स्क्रिप्ट चलाने से पहले लाया जाता है। –

+0

धन्यवाद ... उसने ऐसा किया। निश्चित रूप से सुरुचिपूर्ण नहीं है, लेकिन यह काम करता है। मेरी इच्छा है कि आईई और एफएफएक्स बाह्य स्क्रिप्ट लोड करने पर लगातार व्यवहार करेगी, श्वास लें। – Zendog74

1

तरह से मैं चारों ओर हो गया था:

$(document).ready(function() { 
    document_init(); 
}); 

function document_init() { 
    try{ 

    checkDivLoaded(); 

    [ ... do more stuff ... ] 

    } catch(err) { 
    setTimeout('document_init()', 200); 
    } 
} 

function checkDivLoaded() { 
    if ($('#targetDiv').length == 0) $jquery.error('not ready'); 
} 

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

संबंधित मुद्दे