2011-09-06 14 views
8

मैं एक इंटरमीटेंट स्क्रिप्ट त्रुटि को समझने की कोशिश कर रहा हूं जिसे मैं इंटरनेट एक्सप्लोरर 6 और विंडोज एक्सपी के तहत चल रहे जावास्क्रिप्ट गहन पतले-क्लाइंट एप्लिकेशन में देख रहा हूं। समस्या के मूल कारण है कि निम्नलिखित समारोह कॉल देता है एक null मूल्य है (हालांकि यह एक त्रुटि के बिना सफल होने करता है):किस स्थिति में document.open() वापस शून्य होगा?

var doc = targetWindow.document.open("text/html","_replace"); 

कहाँ targetWindow एक window वस्तु है।

न तो targetWindow है और न ही targetWindow.documentnull है और इसलिए मैं समझने के लिए क्यों यह कॉल null वापसी होगी संघर्ष कर रहा हूँ। the documentation की मेरी व्याख्या यह है कि इस विधि को कभी भी शून्य नहीं होना चाहिए।

यह कोड अपरिवर्तित और कई वर्षों तक पूरी तरह से काम कर रहा है - जब तक कि मुझे समझ में नहीं आता कि यह क्यों हो रहा है, मुझे यकीन नहीं है कि मैं इसे कैसे संभाल सकता हूं, या यह हो सकता है कि यह हो रहा है।

इस फ़ंक्शन को शून्य वापस करने का क्या कारण हो सकता है?

+2

क्या आईई 6 का समर्थन करना बंद करना संभव है? आखिरकार, माइक्रोसॉफ्ट अब भी इसका समर्थन नहीं करता है। इसके अलावा, आईई 8 विंडोज एक्सपी पर ठीक काम करता है। यदि यह एक कॉर्पोरेट वातावरण है, तो आपको अंततः आईई 6 की असुरक्षा, त्रुटियों और सीमाओं से दूर अपग्रेड करने के लिए मनाया जाना चाहिए। –

उत्तर

1

प्रलेखन के अनुसार आपको "प्रतिस्थापन" नहीं होना चाहिए, न कि "_replace"। बजाय इस प्रयास करें:

var doc = targetWindow.document.open("text/html", "replace"); 

के बाद से आप कहते हैं कि अपने कोड वर्षों के लिए काम किया है, तो यह है कि कुछ बदल गया है और ऊपर सुझाव मुद्दा नहीं हो सकता है की संभावना है। हालांकि, यह अभी भी एक कोशिश के लायक है।

क्या आपने हाल ही में अपने आवेदन में उपयोग की जा रही किसी भी जेएस फाइल/लाइब्रेरी को बदल दिया है? साथ ही, क्या आप पृष्ठ के भीतर किसी भी ब्राउज़र प्लगइन का उपयोग कर रहे हैं? यह संभव है कि इनमें से किसी का एक नया संस्करण किसी भी तरह से आपके दस्तावेज़ को "document.open" पर प्रभावित कर सकता है।

0

document.open() में डब्ल्यू 3 सी मानक द्वारा कोई पैरामीटर नहीं है। इस लिंक को देखें: http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-72161170

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

बस तर्क के बिना document.open() का उपयोग करें। उपयोगकर्ता इतिहास में हेरफेर करने के तरीके हैं, लेकिन इसे खराब प्रोग्रामिंग अभ्यास कहा जाता है। इतिहास उपयोगकर्ता का निजी डेटा है और वेब एप्लिकेशन को इसे कुशल बनाने की कोशिश नहीं करनी चाहिए।

+3

आम तौर पर मैं पूरी तरह से इसका समर्थन करता हूं, लेकिन ओपी एक एप्लिकेशन को बनाए रखता है (जैसा कि मैंने इसे पढ़ा है) * केवल * आईई 6 पर चलता है, इस मामले में यह उत्तर लगभग पूरी तरह से बेकार है। ईईई के बारे में थोड़ा सा झुकाव इसे और भी खराब बनाता है। –