2012-12-11 9 views
43

मैं दोनों को स्थगित और का उपयोग कर async निम्नलिखित JavaScript कोड में लोड करने के लिए करना चाहते हैं:क्या आप HTML स्क्रिप्ट टैग पर async और defer विशेषता दोनों का उपयोग कर सकते हैं?

<script defer async src="/js/somescript.js"></script>

आस्थगित करें के बाद से, इंटरनेट एक्सप्लोरर 5.5 + का समर्थन प्राप्त है के रूप में आप CanIUse.com पर देख सकते हैं, मैं शान से वापस आने के लिए करना चाहते अगर एसिंक उपलब्ध नहीं है तो डिफर का उपयोग करने के लिए। Async मुझे लगता है कि यह उपलब्ध होने पर उपयोग करना बेहतर है लेकिन यह इंटरनेट एक्सप्लोरर 10 तक समर्थित नहीं है।

मेरा प्रश्न इसलिए उपरोक्त कोड मान्य HTML है? यदि नहीं, तो क्या एसिंक उपलब्ध नहीं होने पर स्क्रिप्ट पर डिफर का उपयोग करने के लिए शानदार रूप से गिरने के जावास्क्रिप्ट का उपयोग करके इस स्थिति को बनाना संभव है?

उत्तर

75

विनिर्देश से: https://www.w3.org/TR/2011/WD-html5-20110525/scripting-1.html#attr-script-async

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

+9

W3C spec –

+0

में डेलविंग के लिए +1 क्या यह सच है ?: 1. दोनों 'async'' defer' मौजूद हैं, आधुनिक ब्राउज़र 'async' के रूप में चलते हैं; 2. दोनों 'async'' defer' मौजूद हैं, पुराने ब्राउज़र 'डिफ़ॉल्ट' व्यवहार के बजाय 'defer' के रूप में चलाए जाते हैं – vikyd

8

हां, इसका वैध HTML और यह अपेक्षा की तरह काम करेगा।

किसी भी W3C अनुरूप ब्राउज़र async विशेषता समझते हैं और स्क्रिप्ट ठीक से व्यवहार करेगा, जबकि विरासत आईई संस्करणों आस्थगित करें विशेषता पहचान लेंगे।

के बाद से दोनों विशेषताओं बूलियन आप नहीं है के लिए किसी भी मूल्य निर्दिष्ट कर रहे हैं।

+0

धन्यवाद एक और महान प्रतिक्रिया के लिए @jandy! –

+1

"... अपेक्षित काम करेगा।" हालांकि आप इसे क्या करने की उम्मीद करेंगे ?! –

4

सवाल यह है कि आप इसे क्या करने की उम्मीद करेंगे? मैं स्क्रिप्ट आस्थगित किया जाना है और DOMContentLoaded के बाद ही मार डाला जब ब्राउज़र के निष्क्रिय रहने का उम्मीद करेंगे मौजूद हैं दोनों तो async और स्थगित करें, लेकिन अगर मैं विनिर्देश सही पढ़ रहा हूँ यह आस्थगित करें अगर नजरअंदाज कर दिया है की तरह लग रहा async सेट है और स्क्रिप्ट को असीमित रूप से लोड किया गया है, इसलिए जितनी जल्दी हो सके निष्पादित हो जाएगा, जो DOMContentLoaded से पहले हो सकता है और अन्य संसाधनों को अवरुद्ध कर सकता है।

इन तीन विशेषताओं का उपयोग करके इन तीन विशेषताओं का चयन किया जा सकता है। यदि async विशेषता मौजूद है, तो जैसे ही यह उपलब्ध हो, स्क्रिप्ट को असीमित रूप से निष्पादित किया जाएगा। यदि async विशेषता मौजूद नहीं है लेकिन डिफॉल्ट विशेषता मौजूद है, तो पृष्ठ को पार्सिंग समाप्त होने पर स्क्रिप्ट निष्पादित की जाती है। यदि न तो विशेषता मौजूद है, तो उपयोगकर्ता एजेंट पृष्ठ को पार्स करना जारी रखने से पहले, स्क्रिप्ट तुरंत प्राप्त और निष्पादित की जाती है।

https://www.w3.org/TR/2011/WD-html5-20110525/scripting-1.html#attr-script-async

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