2012-02-07 19 views
28

document.defaultView का मुद्दा क्या है?document.defaultView का बिंदु क्या है?

MDN says:

ब्राउज़रों में दस्तावेज़ या अशक्त कोई भी उपलब्ध करता है, तो साथ जुड़े विंडो ऑब्जेक्ट देता है।

कोड document.defaultView की (PPK's site से) निम्नलिखित बनाता उपयोग की तरह:

function getStyle(el,styleProp) 
{ 
    var x = document.getElementById(el); 
    if (x.currentStyle) 
     var y = x.currentStyle[styleProp]; 
    else if (window.getComputedStyle) 
     var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp); 
    return y; 
} 

कोड इस तरह अन्य स्थानों में पाया जा सकता है, डेविड मार्क मेरी लाइब्रेरी की तरह। मुझे यकीन नहीं है कि लोग सिर्फ पीपीके या किसी अन्य स्रोत से कॉपी कर रहे हैं या स्वतंत्र रूप से इसके साथ आ रहे हैं, लेकिन मुझे यह समझ में नहीं आता है।

मेरा सवाल है, इस तरह के मामलों में document.defaultView का उपयोग करने का क्या मतलब है?

function getStyle(element, styleProp) { 
    if (element === ''+element) element = document.getElementById(element); 
    return element.currentStyle ? element.currentStyle[styleProp] : 
      getComputedStyle(x,null).getPropertyValue(styleProp); 
} 

क्या document.defaultView.getComputedStyle कि window.getComputedStyle या बस getComputedStyle नहीं है क्या करता है: यह इस प्रकार के रूप में इस लिखना आसान नहीं होगा?


cwolves के जवाब ने मुझे सही दिशा में सोचने लगा। मूल कार्य मूर्खतापूर्ण है, defaultView का बिंदु गुम है। मेरा प्रस्ताव कम मूर्खतापूर्ण है, लेकिन defaultView का बिंदु भी गुम है। यहां मेरा नया प्रस्ताव है:

function getStyle(element, styleProp) { 
    var view = element.ownerDocument && element.ownerDocument.defaultView ? 
       element.ownerDocument.defaultView : window; 

    return view.getComputedStyle ? 
       view.getComputedStyle(element,null).getPropertyValue(styleProp) : 
      element.currentStyle ? 
       element.currentStyle[styleProp] : null; 
} 

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

उत्तर

6

मैं इस पर सकारात्मक नहीं हूं, लेकिन मुझे लगता है कि यह एक अलग दस्तावेज़ पर कोड चलाने की कोशिश करने से या तो एक बग फिक्स करने का परिणाम है (यानी स्मृति में मौजूद कुछ है लेकिन पृष्ठ में नहीं है) या कोशिश कर रहा है किसी दस्तावेज़ पर एक अलग विंडो में चलाएं (जैसे एक आईफ्रेम या पॉपअप)।

आपके उद्धरण के अनुसार, जब document.defaultView एक दस्तावेज़ पर चलाया गया है जो वर्तमान दस्तावेज़ नहीं है, तो आप संबंधित विंडो ऑब्जेक्ट प्राप्त करेंगे, इस प्रकार document.documentView.getComputedStyle !== getComputedStyle क्योंकि वे अलग-अलग संदर्भों में हैं।

संक्षेप में, मेरा मानना ​​है कि यह document.window जैसा है जो अस्तित्व में नहीं है।

+0

तो होगा शब्दों का एक और तरीका का उपयोग कर सकता है कि हो, यह केवल तभी उपयोगी होगा जब आपके पास दस्तावेज़ से जुड़े विंडो/ग्लोबल में पहले से कोई संभाल नहीं है? –

+1

जरूरी नहीं - जैसा कि मैंने कहा था, आपके पास कई अलग-अलग दस्तावेज़ (iframes) हो सकते हैं, इसलिए यह उस विशिष्ट विंडो का एक लिंक है (उदा। 'Iframe.contentWindow' बनाम' विंडो' बनाम 'iframe2.contentWindow')। एक दस्तावेज़ को भी चारों ओर स्थानांतरित किया जा सकता है, इसलिए यदि आप उस मूल लिंक को स्टोर करते हैं तो भी यह बदला जा सकता है। मेरा मानना ​​है कि, 'दस्तावेज़' –

+0

से 'वर्तमान विंडो' को संदर्भित करने का एक सुरक्षित तरीका आप सही हैं। फ़ंक्शन को कैसे देखना चाहिए इसके लिए प्रश्न को नए प्रस्ताव के साथ अपडेट करना। –

3

यह केवल एक अमूर्त है जहां तक ​​मैं कह सकता हूं, बस अगर कोई उपयोगकर्ता एजेंट डीओएम कार्यान्वयन के साथ पॉप अप करता है, लेकिन खिड़की के रूप में एक दृश्य प्रदान नहीं करता है। ऑनलाइन डोम स्तर 2.

+0

मुझे विश्वास नहीं है कि ऐसे किसी भी UA का अस्तित्व है? –

+1

DOM 2 विचार अप्रचलित है। 'डिफ़ॉल्ट दृश्य' गुण अब HTML मानक में परिभाषित किया गया है। –

+0

@ ime विदा: दिलचस्प। ऐसा लगता है कि वे इसे पूरी तरह से और एचटीएमएल में डीओएम 3 से बाहर ले गए। मुझे अभी भी whatwg.org नेविगेट करने में कठिनाई हो रही है, हालांकि, क्या आप एक लिंक प्रदान कर सकते हैं? : | – BoltClock

2
MDN getComputedStyle article के अनुसार

में Views देखें,

कई कोड नमूने में, getComputedStyle document.defaultView वस्तु से किया जाता है।

लगभग सभी मामलों में, यह getComputedStylewindow ऑब्जेक्ट पर भी मौजूद है, यह आवश्यक है।

यह संभव है defaultView पैटर्न

  1. लोगों खिड़की के लिए एक युक्ति और
  2. एक API वह भी जावा में प्रयोग करने योग्य था बनाने लिखने के लिए नहीं चाहते के कुछ संयोजन था।

हालांकि, वहाँ a single case वह जगह है जहाँ defaultView की विधि इस्तेमाल किया जाना चाहिए: जब Firefox 3.6 का उपयोग कर फ़्रेम शैलियों का उपयोग करने की।

+3

'डिफ़ॉल्ट दृश्य' उपयोगी है क्योंकि आप 'someElement.ownerDocument.defaultView' कर सकते हैं और यह तब भी काम करेगा यदि तत्व किसी अन्य दस्तावेज़/विंडो से आया था, जैसे कि फ्रेम या 'window.open' या जो भी हो। ऐसा लगता है कि आप जो सामान्य उदाहरण देख रहे हैं, वे इसे याद कर चुके हैं। मैंने वापस जाने की कोशिश की और प्रश्न के बाद इसे समझने की कोशिश की। –

+0

@DaggNabbit एमडीएन लेख के अनुसार, यह सिर्फ फ़ायरफ़ॉक्स 3.6 के लिए था। अब आप केवल 'विंडो' का उपयोग कर सकते हैं और यह भी काम करता है: [** डेमो **] (http: // jsfiddle।नेट/डब्ल्यूक्यूवाईबीएल /) – Oriol

+0

वास्तव में मुझे पीपीके और डीएम के उदाहरणों के बारे में क्या फेंक दिया गया था, उन्होंने 'विंडो' का उपयोग करने के बराबर 'डिफ़ॉल्ट दृश्य' का उपयोग किया था, क्योंकि उन्होंने अभी तक 'दस्तावेज़' का उपयोग करने के लिए वैश्विक 'दस्तावेज़' प्रॉपर्टी का उपयोग किया था। तत्व, इसलिए यह किसी भी तरह से उपयोगी नहीं कर रहा था AFAICT। –

3

ओपी सवाल पूछता है, "document.defaultView की बात है क्या", और जवाब वास्तव में getComputedStyle से कोई लेना देना नहीं है। document.defaultView संपत्ति window ऑब्जेक्ट प्राप्त करने का एक तरीका है यदि किसी के पास में निहित document ऑब्जेक्ट का संदर्भ है। ऐसे मामले हैं जहां window ऑब्जेक्ट जिसे आप संदर्भित करना चाहते हैं (या defaultView) आपके द्वारा चलाए जा रहे कोड के समान विंडो स्कोप में नहीं है।

इसका एक उदाहरण यह है कि यदि आपके पास iframe में document ऑब्जेक्ट का संदर्भ है, और उस iframe के window ऑब्जेक्ट का आसानी से संदर्भ प्राप्त करना चाहते हैं।

एक और मामला हो सकता है कि आप ब्राउजर स्कोप (उदाहरण के लिए, फ़ायरफ़ॉक्स में क्रोम कोड) में विशेषाधिकार प्राप्त संदर्भ में चल रहे हैं, और आपको एक टैबब्रोसर, या दूसरी विंडो के document ऑब्जेक्ट का संदर्भ होना चाहिए।

या, जैसा कि Dagg Nabbit बताते हैं, अगर इन मामलों में से किसी में आप खिड़की के भीतर एक तत्व के लिए एक संदर्भ है, तो आप उस तत्व की मूल window के माध्यम से element.ownerDocument.defaultView

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