</ Body> टैग के बाद <script> टैग लगाना गलत है?


219

शरीर के समापन टैग ( </body>) के बाद स्क्रिप्ट टैग को रखना कितना गलत है । ?

<html>
  ....
  <body>
     ....
  </body>
  <script type="text/javascript" src="theJs.js"></script>
</html>

1
क्या आधुनिक ब्राउज़रों में इसके लिए समर्थन है।
Xdrone

जवाबों:


191

यह टैग या टैग के बाहर मान्य नहीं होगा । इससे भी ज्यादा फर्क नहीं पड़ेगा - जब तक कि आप DOM मैनिपुलेशन नहीं कर रहे हैं जो IE को बॉडी एलिमेंट पूरी तरह से लोड होने से पहले तोड़ सकता है - इसे क्लोजिंग से ठीक पहले डालना ।<body><head></body>

<html>
  ....
  <body>
     ....
     <script type="text/javascript" src="theJs.js"></script>
  </body>
</html>

13
@epalla: यदि आप स्क्रिप्ट को बॉडी टैग के अंत में डालते हैं, तो वहां पहुंचने के समय तक लोड करने के लिए कोई अन्य सामग्री नहीं बचती है, इसलिए इसे बाहर या सिर्फ अंदर रखने के बीच थोड़ा अंतर होना चाहिए। आपके पास तब भी आपके पृष्ठ का अतिरिक्त लाभ मान्य है, जो कि मैं अपने उत्तर में बनाने की कोशिश कर रहा था।
एंडी ई

1
हां, मैं आपसे सहमत हूं क्योंकि आपका जवाब अच्छा है। मैं बस यह जोड़ना चाहता था कि जेएस को सिर के बजाय पृष्ठ के निचले भाग में रखने का एक कारण है, जैसा कि हमने लंबे समय से किया है।
मैट ब्रुनेयर

3
@PHPst: ठीक है, अमान्य कोड कुछ ब्राउज़रों में साइड इफेक्ट के अधीन हो सकते हैं। किसी भी तरह से, मैं यह नहीं देखता कि इसका इंडेंटेशन एक टैब की चौड़ाई से ऊपर कोड से कम होने के कारण यह किसी भी क्लीनर को कैसे दिखता है।
एंडी ई

1
@PHPst: यदि आप वास्तव में इस तरह से अपना कोड लिखना चाहते हैं, तो मैं आपसे ब्राउज़र का सामना करने की उम्मीद करूंगा। मैं फिर भी आपके कोड को मान्य करने के लिए लिखने की सलाह दूंगा।
एंडी ई

1
@technosaurus: हमेशा ऐसा होता है <script src="..." defer>, जो सभी प्रमुख ब्राउज़रों में काम करता है (यद्यपि IE9 और निम्न में संभावित रूप से ब्रेकिंग बग के साथ)।
एंडी ई

88

हाँ। शरीर के लिए अंतिम टैग के बाद केवल html तत्व के लिए टिप्पणियों और अंतिम टैग की अनुमति है।

ब्राउज़र त्रुटि सुधार कर सकते हैं, लेकिन आपको उस पर कभी भी निर्भर नहीं होना चाहिए।


12
यह एक बेहतर जवाब है। वहाँ बहुत से नए ब्राउज़र हैं जो मोबाइल में आने के साथ जोखिम में आ जाते हैं और यह गलत होता है जब आपको एक एकल समापन टैग को काटना और चिपकाना होता है।
एरिक रेपेन

33

जैसा कि एंडी ने कहा कि दस्तावेज मान्य नहीं होगा, लेकिन फिर भी स्क्रिप्ट की व्याख्या की जाएगी। उदाहरण के लिए WebKit से स्निपेट देखें :

void HTMLParser::processCloseTag(Token* t)
{
    // Support for really broken html.
    // we never close the body tag, since some stupid web pages close it before 
    // the actual end of the doc.
    // let's rely on the end() call to close things.
    if (t->tagName == htmlTag || t->tagName == bodyTag 
                              || t->tagName == commentAtom)
        return;
    ...

11
"वास्तव में टूटे html के लिए समर्थन।" - मुझे लगता है कि यह सब कहता है।
डियोगो कोल्लॉस

8

IE इसे अब अनुमति नहीं देता है (संस्करण 10 के बाद से, मुझे विश्वास है) और इस तरह की लिपियों को अनदेखा करेगा। एफएफ और क्रोम अभी भी उन्हें सहन करते हैं, लेकिन संभावना है कि किसी दिन वे इसे गैर-मानक के रूप में छोड़ देंगे।


1
और फिर भी Google यह उनके उदाहरण में करता है कि जी + साइन-इन कैसे करें, "आखिरी अपडेट 10 अप्रैल 2014" के साथ। मैंने इसे सर्वर ( डेवलपर. google.com/+/quickstart/java) पर जावा के लिए संस्करण से प्राप्त किया, लेकिन संभवतः यह सभी के लिए एक ही HTML + js है।
टॉम

2

W3C द्वारा अनुशंसित प्रक्रिया द्वारा "तत्व निकाय" के बाद "तत्व लिपि" के अनुसार "तत्व लिपि" डालें । "ट्री कंस्ट्रक्शन" में उस सामग्री को प्रोसेस करने के लिए एरर बनाते हैं और "फिर से टोकन" चलाते हैं। तो यह अतिरिक्त कदम की तरह है। तभी "स्क्रिप्ट निष्पादन" चलाया जा सकता है - योजना प्रक्रिया देखें ।

और कुछ भी "पार्स त्रुटि"। "सम्मिलन मोड" को "शरीर में" स्विच करें और टोकन को पुन: उत्पन्न करें।

तकनीकी रूप से ब्राउज़र द्वारा यह आंतरिक प्रक्रिया है, वे इसे कैसे चिह्नित और अनुकूलित करते हैं।

मुझे उम्मीद है कि मैंने किसी की मदद की।


0

हाँ। लेकिन अगर आप इसके बाहर कोड जोड़ते हैं तो सबसे अधिक संभावना दुनिया का अंत नहीं होगा क्योंकि अधिकांश ब्राउज़र इसे ठीक कर देंगे, लेकिन यह अभी भी एक बुरा अभ्यास है।


0

Google वास्तव में 'सीएसएस ऑप्टिमाइज़ेशन' के संबंध में इसकी अनुशंसा करता है। वे महत्वपूर्ण अस्तर-गुना शैलियों को अस्तर देने और शेष (सीएसएस फ़ाइल) को हटाने की सलाह देते हैं।

उदाहरण:

<html>
  <head>
    <style>
      .blue{color:blue;}
    </style>
    </head>
  <body>
    <div class="blue">
      Hello, world!
    </div>
  </body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>

देखें: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery


8
आप bodyतत्व के बाहर सामान रखने वाले नहीं हैं । Google लेख किसी को भी ऐसी कोई भी बात करने की सलाह नहीं देता है।
चेज़मोस्कल

2
मुझे डर है कि गूगल पेज वास्तव में सिर्फ इतना ही कहता है।
10us

6
ऐसा लगता है कि एक समय में, उस पृष्ठ ने ऐसी बात की सिफारिश की थी , लेकिन अब और नहीं। (अब जावास्क्रिप्ट के साथ कुछ गतिशील लोड हो रहा है।) जर्मन संस्करण पुराना नहीं है और अभी भी पुराने कोड का उदाहरण है।
bodo

1
"एलिमेंट नॉटस्क्रिप्ट" को RFC द्वारा "एलिमेंट html" और "एलिमेंट बॉडी" के अंदर होना चाहिए
BG Bruno

0

आधुनिक ब्राउज़रों के शरीर में लिपि टैग लगेंगे जैसे:

<body>
    <script src="scripts/main.js"></script>
</body>

मूल रूप से, इसका मतलब है कि पृष्ठ के समाप्त होने के बाद स्क्रिप्ट लोड हो जाएगी, जो कुछ मामलों में उपयोगी हो सकती है (जैसे डोम हेरफेर)। हालाँकि, मैं आपको वही स्क्रिप्ट लेने की सलाह देता हूं और इसे "डीफर" के साथ हेड टैग में डाल देता हूं, क्योंकि यह समान प्रभाव देगा।

<head>
    <script src="scripts/main.js" defer></script>
</head>

क्या उपयोगी होगा यदि scriptटैग में एक eventविशेषता थी जिसे स्क्रिप्ट को पार्स करने के लिए निर्धारित करने के लिए परिभाषित किया जा सकता है। इसलिए आपके पास event="load" event="DOMContentLoaded"DOM बनाने के बाद या event="beforeunload"विंडो beforeunloadइवेंट पर स्क्रिप्ट चलाने के लिए है । उदाहरण के लिए, <script src="scripts/main.js" event="DOMContentLoaded"></script>
1.21 गीगावाट 11
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.