IE9 प्लेटफ़ॉर्म की चौथी प्री-रिलीज़ के लिए, जिस तरह से चक्र जावास्क्रिप्ट सबसिस्टम को IE में एकीकृत किया गया है, उसे काफी नए सिरे से डिजाइन किया गया है।
डीन के प्रकाशन में वर्णित यह रीडिज़ाइन, IE9 मानकों के मोड के लिए DOM प्रोग्रामिंग मॉडल को थोड़ा बदल देता है, जिससे यह नए ECMAScript 5 सुविधाओं के साथ संगत हो जाता है, अन्य ब्राउज़रों के साथ अधिक बातचीत और नए मानकों (
WebIDL ) का अनुपालन करता है।
यह प्रकाशन प्रोग्रामिंग मॉडल के कुछ परिवर्तनों पर बारीकी से विचार करने की योजना बना रहा है। DOM मॉडल की इन उन्नत सुविधाओं का लाभ प्लेटफ़ॉर्म की नवीनतम रिलीज़ में मिल सकता है। इन परिवर्तनों को उजागर करने के लिए, मैं
DOM मॉडल की उन्नत विशेषताओं के डेमो पृष्ठ का उल्लेख करूंगा, जिसे मंच के चौथे प्रारंभिक रिलीज के लिए बनाया गया था।

इस डेमो में, 24 विशेषताओं का परीक्षण किया गया है, जिन्हें 4 मुख्य श्रेणियों में विभाजित किया गया है:
- अपने स्वयं के जावास्क्रिप्ट ऑब्जेक्ट्स से DOM मॉडल की वस्तु का उत्तराधिकार;
- डोम मॉडल वस्तुओं के साथ जावास्क्रिप्ट कार्यात्मक स्थिरता;
- अंतर सॉफ्टवेयर घटक;
- DOM मॉडल ऑब्जेक्ट्स पर लागू नए ECMAScript 5 के लिए समर्थन।
पहली दो श्रेणियां बारीकी से संबंधित हैं, इसलिए उन्हें एक साथ विचार करें।
देशी जावास्क्रिप्ट ऑब्जेक्ट्स से DOM मॉडल ऑब्जेक्ट इनहेरिट करना और DOM मॉडल ऑब्जेक्ट्स के साथ जावास्क्रिप्ट की कार्यात्मक स्थिरता।IE9 से पहले, जावास्क्रिप्ट सबमिशन क्लासिक COM मॉडल बाइंडिंग तंत्र के माध्यम से DOM मॉडल के साथ जुड़ा हुआ है। ये उपग्रहों की बाइंडिंग केवल जावास्क्रिप्ट सबसिस्टम में डोम मॉडल की वस्तुओं और कार्यों के आदिम प्रतिनिधित्व के लिए मान्य हैं। नतीजतन, कई मुख्य जावास्क्रिप्ट विशेषताएं जो डेवलपर्स को अपेक्षित थीं, वे सभी ऑब्जेक्ट्स और फ़ंक्शंस के लिए उपलब्ध होनी चाहिए (DOM मॉडल ऑब्जेक्ट्स जैसे विंडो, दस्तावेज़, नोडलिस्ट, आदि सहित) वास्तव में केवल अपनी वस्तुओं के लिए उपलब्ध थे। जावास्क्रिप्ट (जैसे कि ऐरे, नंबर, आदि)।
ECMAScript मानक बुनियादी संचालन को स्थापित करता है जो सभी जावास्क्रिप्ट वस्तुओं में समान काम करता है, लेकिन "मानक वस्तुओं" को इन मानक सेटिंग्स से विचलित करने की अनुमति देता है। IE में पुराने जावास्क्रिप्ट सबसिस्टम ने DOM मॉडल ऑब्जेक्ट्स को "बेस ऑब्जेक्ट्स" के रूप में लिया, जिसका अर्थ है कि बुनियादी जावास्क्रिप्ट ऑपरेशन, जैसे कि एक्सेसिंग गुण, अजीब व्यवहार कर सकते हैं। जबकि ECMAScript सक्षम था, DOM मॉडल ऑब्जेक्ट्स और JavaScript ऑब्जेक्ट्स के असंगत व्यवहार ने उनके लिए जिम्मेदार वेब डेवलपर्स के लिए मुश्किलें पैदा कीं।
उदाहरण के लिए, कई वेब डेवलपर्स के लिए सबसे आम सवालों में से एक यह था कि IE डोम फ़ंक्शन को "ऑब्जेक्ट" के रूप में जावास्क्रिप्ट
टाइपोफ़ ऑपरेटर में लौटाया गया था और "फ़ंक्शन" के रूप में नहीं (यह विशेषता विशेष रूप से डेमो संस्करण के भाग # 10 में परीक्षण की गई थी)।
IE मानक मोड में, DOM मॉडल देशी वस्तुओं और जावास्क्रिप्ट कार्यों के रूप में बनाया गया है, न कि "मूल वस्तुओं" के रूप में, जो कि वेब डेवलपर्स अपनी खुद की वस्तुओं से अपेक्षित कार्यक्षमता की उपलब्धता सुनिश्चित करता है।
अंतर सॉफ्टवेयर घटकसुविधाओं का तीसरा समूह IE प्रोग्रामिंग मॉडल के अद्वितीय व्यवहार को दर्शाता है, जो आमतौर पर वेब डेवलपर्स के लिए कठिनाइयों का कारण बनता है। चूंकि यह व्यवहार केवल IE प्रोग्रामिंग मॉडल में मौजूद था, वेब डेवलपर्स ने पाया कि उनके कोड विभिन्न ब्राउज़रों में समान काम नहीं करते थे।
नए एकीकरण वास्तुकला के हिस्से के रूप में, कई विसंगतियों को हटा दिया गया था जो एक ही स्क्रिप्ट को विभिन्न ब्राउज़रों में समान काम करने से रोकते थे। यह प्रोग्रामिंग मॉडल उन साइटों को जन्म दे सकता है जिनके पास IE के लिए विशेष कोड बनाया गया है IE9 पहले की तुलना में अलग तरह से व्यवहार करता है। इसलिए, यह इन परिवर्तनों का अधिक गहराई से वर्णन करने के लिए समझ में आता है।
कार्य अब enumerable हैंIE8 और इससे पहले, DOM मॉडल ऑब्जेक्ट की गणना ने DOM मॉडल ऑब्जेक्ट के किसी भी सदस्य कार्यों की चिंता नहीं की थी। IE9 अब एक DOM मॉडल ऑब्जेक्ट के सभी गुणों को सूचीबद्ध करता है जिसका "enumerable" डिस्क्रिप्टर "true" पर सेट है। (दूसरे शब्दों में, गणना को प्रोग्रामेटिक रूप से बदला जा सकता है।) अब अन्य ब्राउज़र के साथ संगतता सुनिश्चित करने के लिए फ़ंक्शन डिफ़ॉल्ट रूप से एन्यूमरेट किए गए हैं।
सम्मिलित फ़ंक्शन कॉल हटाया गयाIE के पिछले संस्करणों में DOM मॉडल के कार्य बल्कि गैर-मानक थे। वे न केवल वस्तु के
टाइपोफ की तरह दिखते थे, बल्कि स्थिर मूल्य "यह" भी बनाए रखते थे, जिस वस्तु का ये कार्य होता है। इसलिए, DOM मॉडल के फ़ंक्शन के संदर्भ को कैश करना और "यह" के मूल्य को स्पष्ट रूप से पारित किए बिना कॉल करना संभव था:
// IE8 और पिछले संस्करणों में काम करता है
// IE9 और अन्य ब्राउज़रों में काम नहीं करता है
var cachedGetElementById = document.getElementById;
cachedGetElementById ('मूल्य');
IE9 में, यह अब एक अपवाद फेंक देगा, जैसा कि अन्य ब्राउज़रों में होता है। इस IE व्यवहार पर पहले से निर्भर कोड में, आप ".call" वर्कअराउंड का उपयोग कर सकते हैं:
// IE8 / IE9 और अन्य ब्राउज़रों में काम करता है
// IE7 और पिछले संस्करणों में काम नहीं करता है
var cachedGetElementById = document.getElementById;
cachedGetElementById.call (दस्तावेज़, 'मूल्य');
ECMAScript 5 में, फ़ंक्शन के लिए एक "बाइंड" तरीका है जो उन्हें IE द्वारा समर्थित प्रोग्रामिंग सुविधाओं को ओवरराइड नहीं करने देता है:
// मूल रूप से IE9 में ECMAScript 5 "बाउंड" एपीआई के लिए धन्यवाद
var cachedGetElementById = document.getElementById.bind (दस्तावेज़);
cachedGetElementById ('मूल्य');
DOM मॉडल के अपवादों और "निरंतर" गुणों के लिए समर्थनIE9 एन्हांस्ड DOM मॉडल में अब W3C- वातानुकूलित ऑब्जेक्ट्स और मानकीकृत
DOM मॉडल अपवाद त्रुटि कोड हैं जो वेब डेवलपर्स DOM मॉडल API क्रैश की प्रकृति को निर्धारित करने के लिए (आमतौर पर) उपयोग कर सकते हैं। ये कोड आमतौर पर कोड की पठनीयता बढ़ाने के लिए अच्छी तरह से परिभाषित "स्थिर" गुणों के साथ तुलना की जाती है:
...
पकड़ना (पूर्व) {
अगर (ex.code == DOMException.INDEX_SIZE_ERR)
...
}
उन्नत DOM मॉडल पूर्वनिर्धारित "स्थिर" गुण प्रदान करता है, साथ ही DOM मॉडल अपवादों को कॉल करने और पकड़ने के लिए एक वास्तुकला प्रदान करता है।
स्ट्रींग का समग्र व्यवहारचक्र और डीओएम मॉडल के पूर्ण एकीकरण के साथ, उत्तरार्द्ध में स्वयं के कार्यान्वयन का अभाव है (स्ट्रिंग एक फ़ंक्शन जो किसी ऑब्जेक्ट को स्ट्रिंग में परिवर्तित करता है)। यद्यपि पुराने DOM मॉडल में स्ट्रैस कार्यान्वयन जावास्क्रिप्ट के अंतर्निहित संस्करण के समान था, यह बिल्कुल वैसा ही नहीं था और अक्सर असंगत या भ्रमित परिणाम पैदा करता था। IE9 के DOM मॉडल ऑब्जेक्ट अब मानक परिणाम प्राप्त करने के लिए जावास्क्रिप्ट अंतर्निहित इनस्ट्रिंग फ़ंक्शन का उपयोग करते हैं।
गुणों और विशेषताओं का भंडार अलग करनापिछले आर्किटेक्चर में, DOM मॉडल ऑब्जेक्ट्स का अपना प्रॉपर्टी स्टोर था। यह संपत्ति स्टोर विशेषताओं के लिए स्टोर के स्थान से मेल खाती थी (जो HTML मार्कअप में पाया जा सकता है)। नए IE9 आर्किटेक्चर में, तत्व विशेषता स्टोर तत्व स्क्रिप्ट ऑब्जेक्ट को सौंपे गए गतिशील गुणों से अलग है। इस अलगाव को समझने के लिए, निम्नलिखित मार्कअप उदाहरण पर विचार करें:
<div id = "myId" वर्ग = "c" उपयोगकर्ता-परिभाषित-विशेषता = "परीक्षण">
इस उदाहरण में, विशेषताएँ "आईडी", "वर्ग" और "उपयोगकर्ता-परिभाषित-विशेषता" हैं। Div तत्व का जावास्क्रिप्ट ऑब्जेक्ट भी समान गुण प्रदान करता है:
// एक जावास्क्रिप्ट वस्तु प्राप्त करें जो शरीर का प्रतिनिधित्व करती है
var divOb = document.getElementById ('myId');
divOb.id; // "myId"
divOb.className; // "सी"
ये जावास्क्रिप्ट गुण तत्व की विशेषता सूची में संग्रहीत मानों को पुनः प्राप्त करते हैं। उदाहरण के लिए, आईडी आईडी विशेषता के मूल्य को पुनः प्राप्त करता है, और className वर्ग विशेषता के मूल्य को पुनः प्राप्त करता है।
IE के पिछले संस्करणों में, कोई भी गतिशील रूप से जोड़े गए गुण "जादुई" तत्व विशेषताओं की सूची में दिखाई दे सकते हैं और, इसके विपरीत, स्टोर के सामान्य स्थान के कारण गायब हो जाते हैं। इससे अप्रत्याशित परिणाम हो सकते हैं:
<div id = "myId" वर्ग = "c" उपयोगकर्ता-परिभाषित-विशेषता = "परीक्षण">
...
var divOb = document.getElementById ("myId");
// निम्नलिखित कथन अप्रत्याशित रूप से "userProperty" को जोड़ता है
// तत्व को विशेषता।
divOb.userProperty = "परीक्षण"
// कितनी विशेषताएँ?
चेतावनी ("कुल विशेषताएँ =" + divOb.attributes.length);
IE9 और अन्य ब्राउज़र तीन सामान्य विशेषताओं ("आईडी", "वर्ग" और "उपयोगकर्ता-परिभाषित-विशेषता") को इंगित करते हैं, जबकि IE के चार संस्करण के पिछले संस्करण, सूची में "userProperty" को जोड़ते हैं। रिवर्स उदाहरण अधिक सामान्य है - कोड जो उपयोगकर्ता के गुणों को गतिशील गुणों के रूप में प्रदर्शित करने की अपेक्षा करता है:
<div id = "myId" वर्ग = "c" उपयोगकर्ता-परिभाषित-विशेषता = "परीक्षण" userAttribute = "परीक्षण">
...
var divOb = document.getElementById ("myId");
// मान प्राप्त करें "userAttribute" और "उपयोगकर्ता-परिभाषित-विशेषता"
// (केवल IE8 और पिछले संस्करणों में काम करता है)
var value1 = divOb.userAttribute;
var value2 = divOb ["उपयोगकर्ता-परिभाषित-विशेषता"];
हमने कोड के उस हिस्से को देखा है जो इस अप्रचलित IE व्यवहार को मानता है। अज्ञात विशेषताओं को पुनः प्राप्त करने के लिए एक अंतर-तरीका है getAttribute का उपयोग करना
var value1 = divOb.getAttribute ("userAttribute");
var value2 = divOb.getAttribute ("उपयोगकर्ता-परिभाषित-विशेषता");
इस मामले में, आपको विशेषताओं के संग्रह का उपयोग करके गतिशील गुणों का अनुरोध नहीं करना चाहिए।
नई ईसीएमएस्क्रिप्ट 5 सुविधाएँफीचर परीक्षणों के अंतिम समूह में, ECMAScript 5 द्वारा चक्र में प्रदान की गई
नई सुविधाओं को DOM मॉडल पर लागू किया गया था। IE9 में DOM मॉडल को बेहतर बनाने के मुख्य लक्ष्यों में से एक DOM मॉडल का प्रतिनिधित्व प्रदान करना था, जिसने ECMAScript 5 के शब्दार्थ के संदर्भ में तार्किक अर्थ दिया था। इसे बहुत सरल बना दिया गया था क्योंकि ECMAScript 5 के मुख्य लक्ष्यों में से एक DOM ऑब्जेक्ट के लिए आवश्यक कार्यक्षमता में सुधार करना है। ! हमारे कार्यान्वयन में, हमने कल्पना की कि DOM मॉडल ECMAScript 5 की मूल सुविधाओं की अधिकतम संभव संख्या का उपयोग करता है, जिसमें एक्सेस विधि (गेट्टर / सेटर) के गुणों का व्यापक उपयोग भी शामिल है।
प्लेटफ़ॉर्म कार्यक्षमता के इस एकीकरण के लिए धन्यवाद,
सभी नई ECMAScript5 सुविधाएँ मूल वस्तुओं और DOM मॉडल ऑब्जेक्ट्स दोनों के साथ समान रूप से अच्छी तरह से काम करती हैं।
DOM मॉडल की उन्नत विशेषताओं के प्रदर्शन में, DOM मॉडल के पूर्ण एकीकरण और जावास्क्रिप्ट सबसिस्टम के साथ जावास्क्रिप्ट सबसिस्टम जो ECMAScript 5 समर्थन जैसे चक्र के साथ संभव है, के केवल 24 उदाहरण दिखाए गए हैं। हम IE9 में इस समर्थन में बहुत रुचि रखते हैं और विभिन्न ब्राउज़रों में ECMAScript बाइंडिंग के लिए बेहतर इंटरऑपरेबिलिटी प्राप्त करने में मदद करने की योजना बनाते हैं। एक महत्वपूर्ण कदम डब्ल्यू 3 सी कंसोर्टियम में इन बाइंडिंग का मानकीकरण है, और हमें इस काम में योगदान करने में खुशी होगी।
W3C कंसोर्टियम वेब मानकों में पहले से ही
ईसीएमएस्क्रिप्ट के लिए एक
भाषा बाध्यकारी कार्यान्वयन है
जो एक मानक आईडीएल (इंटरफ़ेस परिभाषा भाषा) को जावास्क्रिप्ट ऑब्जेक्ट में अनुवाद करने का एक तरीका है। हालाँकि, इन बाइंडिंग में "आधार ऑब्जेक्ट" के एक साधारण बंधन से अधिक कुछ बनाने के लिए कुछ विवरणों का अभाव था (यानी, ECMAScript कार्यक्षमता की पूरी श्रृंखला को ध्यान में रखे बिना बाध्यकारी)। चूँकि अन्य ब्राउज़रों के पास "मूल वस्तुओं" की तुलना में बहुत अधिक पूर्ण भाषा बाइंडिंग थी, इसलिए एकीकरण असंगतताएं बनी रहीं। ये विसंगतियां वास्तव में जावास्क्रिप्ट प्लेटफॉर्म पर डेवलपर्स की योजनाओं को परेशान कर सकती हैं जो मूल भाषा समर्थन के शीर्ष स्तर पर सार परतों और कार्यों को लिखना चाहते हैं। इस अनुपालन के लिए एक प्रस्तावित मानक की आवश्यकता होती है जिसे
वेबआईडीएल (वेब इंटरफेस डेफिनिशन लैंग्वेज) कहा जाता है। WebIDL विनिर्देश, बहुत अधिक सटीकता के साथ वर्णन करता है कि मौजूदा W3C विनिर्देश का अनुवाद WebIDL का उपयोग जावास्क्रिप्ट वस्तुओं में किया गया है।
अगली पोस्ट अधिक विस्तृत विवरण देगी कि हमने कैसे IEID का उपयोग सूचना समर्थन प्रदान करने और IE9 में उन्नत DOM मॉडल के विकास को निर्देशित करने के लिए किया।
हम आपको विस्तारित IE9 DOM मॉडल का परीक्षण करने के लिए कहते हैं। हम आपकी टिप्पणियों और प्रतिक्रिया के लिए तत्पर हैं।