स्क्रिप्ट-तत्व काम क्यों नहीं करते हैं?


1346

क्या कारण है कि ब्राउज़र सही तरीके से पहचान नहीं पाते हैं:

<script src="foobar.js" /> <!-- self-closing script element -->

केवल यह मान्यता प्राप्त है:

<script src="foobar.js"></script>

क्या यह XHTML समर्थन की अवधारणा को तोड़ता है?

नोट: यह कथन कम से कम सभी IE (6-8 बीटा 2) के लिए सही है।


12
क्रोम और ओपेरा में काम करता है
corymathews

46
क्रोम के कुछ हालिया संस्करण से यह टूट गया प्रतीत होता है, स्व-समापन स्क्रिप्ट टैग अब क्रोम में काम नहीं करते हैं
एडम नेस

13
यह सिर्फ स्क्रिप्ट टैग नहीं है। मुझे विश्वास नहीं है कि आत्म-समापन div टैग काम करते हैं।
डीओके

6
जुलाई 2011 तक, क्रोम और फ़ायरफ़ॉक्स में यह समस्या है। "यह एक बग नहीं है, यह एक विशेषता है" - वास्तव में कष्टप्रद।
मार्टिन कोनिसक

4
इसका अधिक सामान्य संस्करण दो दिन बाद पूछा गया: stackoverflow.com/questions/97522/…
Ciro Santilli Sant this this this

जवाबों:


481

XHTML 1 विनिर्देश कहता है:

С.3। तत्व न्यूनतमकरण और खाली तत्व सामग्री

किसी ऐसे तत्व के रिक्त उदाहरण को देखते हुए जिसका कंटेंट मॉडल नहीं है EMPTY(उदाहरण के लिए, एक खाली शीर्षक या पैराग्राफ) न्यूनतम रूप का उपयोग नहीं करते (जैसे उपयोग <p> </p>और नहीं <p />)।

XHTML DTD स्क्रिप्ट तत्वों को निम्नानुसार निर्दिष्ट करता है:

<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>

111
फिर भी, "नहीं" ऐसा नहीं है जैसा कि "नहीं होना चाहिए"। यह एक दिशानिर्देश है (संगतता के लिए, जैसा कि अनुभाग शीर्षक द्वारा सुझाया गया है), नियम नहीं।
कोनराड रुडोल्फ

42
वास्तव में, मुझे इस प्रतिबंध के लिए कोई उपयोग नहीं मिल रहा है :) यह पूरी तरह से कृत्रिम लगता है।
स्क्वाडेट

22
ऑलवेक द्वारा सही उत्तर दिया गया था। XHTML 1.0 के परिशिष्ट C का कारण यह नहीं है कि चीजें जिस तरह से हैं - यह वैसा ही है कि जिस तरह से चीजें हैं उसके आसपास काम करना है।
hsivonen

32
यह विनिर्देशन का एक आदर्श हिस्सा नहीं है। यह केवल उन परिशिष्टों के बारे में है कि कैसे XHTML
Kornel

12
इसके साथ समस्या <script />यह नहीं है कि कल्पना इसे अस्वीकार कर देती है, लेकिन यदि सामग्री प्रकार अनुप्रयोग / xhtml + xml नहीं है तो यह ब्राउज़र इसे "गैर-टैग-सूप" के रूप में व्याख्या नहीं करता है। देखें: stackoverflow.com/questions/348736/… @shabunc: ब्राउज़र इसे समझने के लिए प्रकट हो सकते हैं , लेकिन वास्तव में यह क्या हो रहा है , पैरा के अंदर <p /> के बाद सामग्री डाल रहा है , इसका मतलब है कि स्क्वाडेट के उद्धरण की व्याख्या करने के कारण। p> गैर-रिक्त है, यह स्व-समापन नहीं हो सकता है। XHTML 1.1 में, यह स्व-समापन हो सकता है।
जो

241

ब्रैड और स्क्वाडेट ने जो कहा है, उसे जोड़ने के लिए, स्व-समापन एक्सएमएल सिंटैक्स <script />वास्तव में एक्सएमएल सही है, लेकिन इसके लिए व्यवहार में काम करने के लिए, आपके वेब सर्वर को भी अपने दस्तावेजों को ठीक से एक्सएमएल के साथ XML के रूप में गठित करने की आवश्यकता है जैसे application/xhtml+xmlHTTP में सामग्री-प्रकार हेडर (और जैसा नहींtext/html )।

हालाँकि, XML mimetype भेजने से आपके पेज IE7 द्वारा पार्स नहीं किए जाएंगे, जो केवल पसंद करते हैं text/html

से w3 :

सारांश में, XHTML परिवार दस्तावेज़ों के लिए 'एप्लीकेशन / xHTML + xml' SHOULD का उपयोग किया जाना चाहिए, और 'टेक्स्ट / html' SHOULD का उपयोग HTML- संगत XHTML 1.0 दस्तावेज़ों तक सीमित होना चाहिए। 'एप्लिकेशन / xml' और 'text / xml' MAY का भी उपयोग किया जा सकता है, लेकिन जब भी उचित हो, 'एप्लिकेशन / xhtml + xml' SHOULD का उपयोग उन सामान्य XML मीडिया प्रकारों के बजाय किया जाना चाहिए।

मैं कुछ महीने पहले इस पर हैरान था, और एकमात्र काम करने योग्य (FF3 + और IE7 के साथ संगत) समाधान के <script></script>साथ पुराने वाक्यविन्यास का उपयोग करना थाtext/html (HTML सिंटैक्स + HTML mimetype) के ।

यदि आपका सर्वर text/htmlअपने HTTP हेडर में टाइप भेजता है , यहां तक ​​कि अन्यथा ठीक से बनाए गए XHTML दस्तावेज़ों के साथ, FF3 + अपने HTML रेंडरिंग मोड का उपयोग करेगा, इसका मतलब है कि<script /> यह काम नहीं करेगा (यह एक बदलाव है, फ़ायरफ़ॉक्स पहले कम सख्त था)।

http-equivमेटा तत्वों के साथ किसी भी फ़िडलिंग की परवाह किए बिना ऐसा होगा , XML प्रोलॉग या डॉक्टाइप आपके दस्तावेज़ के अंदर - text/htmlहेडर मिलते ही फ़ायरफ़ॉक्स शाखाएं , जो निर्धारित करती हैं कि HTML या XML पार्सर दस्तावेज़ के अंदर दिखता है या नहीं, और HTML पार्सर समझ में नहीं आता है <script />


3
क्या यह सही है कि यह निष्कर्ष निकालने के लिए कि यदि आप IE7 के लिए समर्थन छोड़ते हैं, तो पाठ / xml भेजने से आपको <script /> के लिए व्यापक ब्राउज़र समर्थन मिलेगा?
क्रिस मोशचिनी

7
तो, संक्षेप में, <script /> केवल तभी काम करेगा जब आपका MIME प्रकार का पृष्ठ xhtml / xml हो। नियमित पाठ / html पृष्ठों के लिए, यह काम नहीं करेगा। और अगर हम "xhtml / xml" MIME प्रकार का उपयोग करने का प्रयास करते हैं, तो यह IE संगतता को तोड़ देगा। संक्षेप में, शांत रखें और <script> का उपयोग करें ... </ script> धन्यवाद Joe ;-)
नवीन इसरानी

1
बहुत बढ़िया स्पष्टीकरण। ध्यान देने योग्य एक और बात यह है कि फ़ायरफ़ॉक्स .htmlमें मेटा टैग की परवाह किए बिना स्थानीय फ़ाइलों को भी इसी तरह के कारणों से मेटा टैग के रूप में प्रस्तुत किया जाएगा । XHTML फ़ाइलों के लिए, फ़ायरफ़ॉक्स केवल उनके अनुसार ही प्रस्तुत करेगा यदि उनका नाम लिया गया है .xhtml
एलेकोव

@ChrisMoschini। शायद, लेकिन उपयोग करें application/xhtml+xml, नहीं text/xml
TRGG

166

किसी के उत्सुक होने पर, अंतिम कारण यह है कि HTML मूल रूप से SGML की एक बोली थी, जो XML के अजीब बड़े भाई हैं। SGML- भूमि में, तत्वों को DTD में सेल्फ-क्लोजिंग (जैसे BR, HR, INPUT) के रूप में निर्दिष्ट किया जा सकता है, जो कि अनुमानित रूप से क्लोजेबल (जैसे P, LI, TD) या स्पष्ट रूप से क्लोजेबल (जैसे TABLE, DIV, SCRIPT) हो सकते हैं। निस्संदेह, XML की कोई अवधारणा नहीं है।

आधुनिक ब्राउज़रों द्वारा उपयोग किए जाने वाले टैग-सूप पार्सर इस विरासत से विकसित हुए हैं, हालांकि उनका पार्सिंग मॉडल अब शुद्ध एसजीएमएल नहीं है। और निश्चित रूप से, आपके सावधानी से तैयार किए गए एक्सएचटीएमएल को बुरी तरह से लिखे गए एसजीएमएल-प्रेरित टैग-सूप के रूप में माना जा रहा है जब तक कि आप इसे XML माइम प्रकार के साथ नहीं भेजते। यह भी है क्यों ...

<p><div>hello</div></p>

... के रूप में ब्राउज़र द्वारा व्याख्या की जाती है:

<p></p><div>hello</div><p></p>

... जो एक सुंदर अस्पष्ट बग के लिए नुस्खा है जो आपको डोम के खिलाफ कोड करने की कोशिश के रूप में आपको फिट बैठता है।


4
मैं उत्सुक हूँ। ब्राउज़र इसे इस तरह व्याख्या करने के लिए क्यों चुनता है?
अहमद ऐसन एक्सन

32
@AhmedAeonAxan: Pतत्व नहीं हो सकते DIVतत्वों (इस अमान्य HTML है), इसलिए ब्राउज़र परोक्ष बंद कर देता है Pखोलने से पहले तत्व ( "के रूप में परोक्ष closeable" परिभाषित) DIVटैग। हालाँकि, ब्राउज़र इस संबंध में अलग व्यवहार करते हैं (जैसा कि वे किसी अमान्य HTML के साथ कर सकते हैं)।
MrWhite

5
@ColeJohnson नहीं, यह टैग सूप नहीं है; greim वैध और अमान्य HTML के बीच की सीमा को कुतर रहा है। टैग सूप वह है जो आपको मिलता है जब लेखक नियमों की परवाह नहीं करते हैं, क्योंकि ब्राउज़र त्रुटि सुधार का उपयोग करते हैं। </p>दूसरी ओर एक लुप्त अंत टैग वास्तव में HTML की परिभाषा का हिस्सा है!
मिस्टर लिस्टर

3
@ मस्टरिस्टर - सॉर्ट। "टैग सूप" का वर्णन है कि HTML को कैसे पार्स किया जाता है, न कि यह कैसे लिखा जाता है। यह एचटीएमएल की समझ बनाने के लिए उपयोग की जाने वाली असमान रणनीतियों ब्राउज़रों का वर्णन करने के लिए इस्तेमाल किया जाने वाला शब्द था, और सख्त XML पार्सिंग के विपरीत खड़ा था। XML पार्सिंग को केवल XML माइम प्रकारों के लिए अनुमति दी जाती है, लेकिन चूंकि उन लोगों ने कभी व्यापक उपयोग हासिल नहीं किया, इसलिए ब्राउज़र विभिन्न "टैग सूप" योजनाओं में वापस आ गए, यहां तक ​​कि अन्यथा वैध दस्तावेजों के लिए भी।
greim

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

161

दूसरों ने "कैसे" और उद्धृत युक्ति का उत्तर दिया है। <script/>बग रिपोर्ट और मेलिंग सूचियों में कई घंटों की खुदाई के बाद "क्यों नहीं " की वास्तविक कहानी है ।


HTML 4

HTML 4 SGML पर आधारित है ।

SGML कुछ है shorttags जैसे <BR//, <B>text</>, <B/text/, या <OL<LI>item</LI</OL>। एक्सएमएल पहला रूप लेता है, ">" (एसजीएमएल लचीला है) के रूप में समाप्त को फिर से परिभाषित करता है, ताकि यह बन जाए <BR/>

हालांकि, HTML को फिर से परिभाषित नहीं किया गया है, इसलिए इसका मतलब <SCRIPT/> होना चाहिए <SCRIPT>>
(हां, '>' सामग्री का हिस्सा होना चाहिए, और टैग अभी भी बंद नहीं है ।)

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

प्रभावी रूप से, सभी 'काम कर रहे' स्व-समाप्त टैग तकनीकी रूप से गैर-अनुरूप पार्सर्स पर निषिद्ध एंड टैग के साथ टैग हैं और वास्तव में अमान्य हैं। यह W3C था जो इस हैक के साथ आया था ताकि इसे HTML- संगत बनाकर XHTML को बदलने में मदद मिल सके ।

और <script>अंत टैग है निषिद्ध नहीं है

"स्व-समाप्ति" टैग HTML 4 में एक हैक है और अर्थहीन है।


HTML 5

एचटीएमएल 5 में पांच प्रकार के टैग हैं और केवल 'शून्य' और 'विदेशी' टैग को स्व-बंद करने की अनुमति है

क्योंकि <script>यह शून्य नहीं है (इसमें सामग्री हो सकती है) और विदेशी नहीं है (जैसे मैथ्मेल या एसवीजी), <script>स्वयं बंद नहीं किया जा सकता है, भले ही आप इसका उपयोग कैसे करें।

लेकिन क्यों? क्या वे इसे विदेशी नहीं मानते, विशेष मामला बनाते हैं, या कुछ और?

HTML 5 का उद्देश्य HTML 4 और XHTML के कार्यान्वयन के साथ पिछड़ा-संगत होना है । यह SGML या XML पर आधारित नहीं है; इसका सिंटैक्स मुख्य रूप से दस्तावेज़ीकरण और कार्यान्वयन को एकजुट करने से संबंधित है। (यही कारण है कि आदि अमान्य HTML4 होने के बावजूद वैध HTML 5 हैं ।)<br/> <hr/>

स्व-समापन <script>उन टैगों में से एक है जहां कार्यान्वयन अलग-अलग होते थे। यह क्रोम, सफारी में काम करता था , और ओपेरा ; मेरे ज्ञान के लिए यह इंटरनेट एक्सप्लोरर या फ़ायरफ़ॉक्स में कभी काम नहीं किया।

यह चर्चा की गई थी जब HTML 5 का मसौदा तैयार किया गया था और अस्वीकार कर दिया गया था क्योंकि यह ब्राउज़र संगतता को तोड़ता है । वे वेबपृष्ठ जो स्वयं-बंद स्क्रिप्ट टैग को सही ढंग से प्रस्तुत नहीं कर सकते (यदि सभी में) पुराने ब्राउज़रों में। अन्य प्रस्ताव थे , लेकिन वे संगतता समस्या को हल नहीं कर सकते।

मसौदा जारी होने के बाद, WebKit ने पार्सर को अनुरूपता में अद्यतन किया।

<script>HTML 4 और XHTML 1 में पिछड़ी संगतता के कारण HTML 5 में स्व-समापन नहीं होता है।


XHTML 1 / XHTML 5

जब वास्तव में एक्सएचटीएमएल के रूप में कार्य किया जाता है, <script/>तो वास्तव में बंद कर दिया जाता है, अन्य उत्तरों के रूप में ने कहा है।

सिवाय इसके कि ऐनक का कहना है कि इसे HTML के रूप में कार्य करने पर काम करना चाहिए :

XHTML दस्तावेज़ ... को इंटरनेट मीडिया प्रकार "टेक्स्ट / html" [RFC2854] के साथ लेबल किया जा सकता है, क्योंकि वे अधिकांश HTML ब्राउज़र के साथ संगत हैं।

तो क्या हुआ?

लोगों ने मोज़िला को निर्दिष्ट सामग्री हेडर ( सामग्री को सूँघने के रूप में जाना जाता है ) की परवाह किए बिना फ़ायरफ़ॉक्स पार्स दस्तावेजों को एक्सएचटीएमएल के रूप में जाने देने के लिए कहा । यह स्व-समापन स्क्रिप्ट की अनुमति देता था , और सामग्री सूँघना वैसे भी आवश्यक था क्योंकि वेब होस्टर्स सही हेडर की सेवा के लिए पर्याप्त परिपक्व नहीं थे; IE यह अच्छा था ।

यदि पहला ब्राउज़र युद्ध IE 6 के साथ समाप्त नहीं हुआ, तो XHTML सूची में भी हो सकता है। लेकिन यह खत्म हो गया। और IE 6 में XHTML की समस्या है । वास्तव में IE का समर्थन नहीं किया सही MIME प्रकार सब पर , मजबूर कर हर किसी को उपयोग करने के लिए text/htmlXHTML के लिए क्योंकि आईई आयोजित प्रमुख बाजार में हिस्सेदारी एक पूरे दशक के लिए।

और यह भी कि सामग्री सूँघना वास्तव में खराब हो सकता है और लोग कह रहे हैं कि इसे रोका जाना चाहिए

अंत में, यह पता चला है कि W3C का मतलब XHTML को सूँघने योग्य नहीं था : दस्तावेज़ दोनों HTML और XHTML और Content-Typeनियम हैं। एक कह सकते हैं कि वे "बस हमारी कल्पना का पालन करें" पर दृढ़ थे और जो व्यावहारिक था उसे अनदेखा कर रहे हैं । एक गलती जो जारी रही बाद के XHTML संस्करणों में रही।

वैसे भी, इस निर्णय ने फ़ायरफ़ॉक्स के लिए मामला सुलझा लिया । क्रोम के जन्म से 7 साल पहले की बात है ; कोई अन्य महत्वपूर्ण ब्राउज़र नहीं थे। इस प्रकार यह तय किया गया था।

निम्नलिखित विशिष्टताओं के कारण अकेले doctype को निर्दिष्ट करना XML पार्सिंग को ट्रिगर नहीं करता है।


1
@AndyE जब आप स्व-समापन <स्क्रिप्ट> लिखते हैं, तो उस समय के प्रमुख ब्राउज़र नहीं सोचते कि यह बंद है, और बाद में HTML को जावास्क्रिप्ट के रूप में पार्स कर देगा, जिससे वैध HTML5 इन पुराने ब्राउज़रों पर टूट जाएगा। इस प्रकार प्रस्ताव को अस्वीकार कर दिया जाता है। यह लिंक किए गए HTML5 मेलिंग सूची में बताया गया है।
शीप

2
@AndyE: आप जो वर्णन कर रहे हैं वह आगे की अनुकूलता है - नए संकलक / दुभाषिया / पार्सर के साथ काम करने के लिए पुराने कोड की क्षमता। पुराने कंपाइलर / दुभाषिया / पार्सर के साथ काम करने के लिए बैकवर्ड संगतता नए कोड की क्षमता है। तो हां, बैकवर्ड कम्पैटिबिलिटी एक मुद्दा था, क्योंकि नए फीचर्स के साथ लिखे गए पेज पुराने ब्राउजरों में काम नहीं करेंगे (और हां, पुराने ब्राउजरों में नए कोड वर्क को ज्यादा से ज्यादा करने की कोशिश करना और बनाने के लिए वेब प्रोग्रामिंग की परंपरा है)।
स्लीपबेटमैन

3
@ डमिट्री वास्तविकता यह है कि स्व-बंद स्क्रिप्ट को अस्वीकार करना एक तरह से सड़क है। जैसा कि जुड़ा हुआ है , स्व-बंद <स्क्रिप्ट> सभी ब्राउज़रों को तोड़ देगा , उपयोगकर्ताओं को बस खाली पृष्ठ - गेम कंसोल, इंटरनेट टीवी, नए कॉर्पोरेट Win7 पीसी पर IE 11 , लाखों जावा रनटाइम , या अरबों स्मार्टफोन दिखाई देंगे । क्या आप अधिकांश उपकरणों पर अधिकांश भाषाओं के अधिकांश WebView को अपग्रेड कर सकते हैं? यदि HTML5 ने कोशिश की कि वे XHTML2 की तरह विफल हो जाते।
भेड़ का बच्चा

6
बहुत ही कम जवाब
कामिल तोमिश

2
थोड़ा सुधार: HTML में स्व-बंद के रूप में काम करने वाले टैग वैकल्पिक अंत टैग वाले नहीं हैं , लेकिन निषिद्ध अंत टैग (खाली, या शून्य, टैग) वाले हैं। वैकल्पिक अंत टैग के साथ टैग, जैसे <p>या <li>, 'स्व-बंद' नहीं किया जा सकता है क्योंकि उनके पास सामग्री हो सकती है, इसलिए कोड जैसा <p/>कुछ भी नहीं है जो एक (विकृत) टैग को शुरू करता है और इसके बाद सामग्री, यदि यह इस तत्व में अनुमत है , इसके अंदर खत्म हो जाएगा।
इल्या स्ट्रेलित्सिन

44

Internet Explorer 8 और इससे पहले के XHTML पार्सिंग का समर्थन नहीं करते हैं। यहां तक ​​कि अगर आप एक XML घोषणा और / या एक एक्सएचटीएमएल सिद्धांत का उपयोग करते हैं, तो पुराने IE अभी भी दस्तावेज़ को सादे HTML के रूप में पार्स करते हैं। और सादे HTML में, स्व-समापन सिंटैक्स समर्थित नहीं है। ट्रेलिंग स्लैश को केवल अनदेखा किया जाता है, आपको एक स्पष्ट समापन टैग का उपयोग करना होगा।

यहां तक ​​कि XHTML पार्सिंग के लिए समर्थन वाले ब्राउज़र, जैसे IE 9 और बाद में , तब भी दस्तावेज़ को HTML के रूप में पार्स करेगा जब तक कि आप XML सामग्री प्रकार के साथ दस्तावेज़ की सेवा नहीं करते। लेकिन उस स्थिति में पुराना IE दस्तावेज़ को बिल्कुल भी प्रदर्शित नहीं करेगा!


9
"IE XHTML पार्सिंग का समर्थन नहीं करता है।" यह लिखे जाने के समय IE संस्करणों के लिए सही था, लेकिन अब सच नहीं है।
19

@ EricLaw आप स्पष्ट कर सकते हैं कि IE के किस संस्करण ने इसे निर्धारित किया है? (और कोई विशिष्ट शर्तें - जैसे वैध
सिद्धांत

2
@scunliffe IE9 XHTML के पूर्ण समर्थन वाला पहला संस्करण था। blogs.msdn.com/b/ie/archive/2010/11/01/…
EricLaw

28

ऊपर के लोगों ने पहले से ही इस मुद्दे को बहुत समझाया है, लेकिन एक चीज जो चीजों को स्पष्ट कर सकती है, वह यह है कि हालांकि लोग <br/>HTML दस्तावेजों में और हर समय उपयोग करते हैं , /ऐसी स्थिति में किसी को भी मूल रूप से अनदेखा किया जाता है, और केवल तब उपयोग किया जाता है जब बनाने की कोशिश की जाती है। XML और HTML दोनों के रूप में पार्स करने योग्य कुछ। <p/>foo</p>उदाहरण के लिए, कोशिश करें और आपको एक नियमित पैराग्राफ मिल जाए।


22

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

दूसरी ओर, HTML में बाहरी संसाधनों के संदर्भों के लिए एक उत्कृष्ट टैग है: <link>टैग, और यह स्वयं-बंद हो सकता है। यह पहले से ही स्टाइलशीट, आरएसएस और एटम फ़ीड, विहित यूआरआई और अन्य प्रकार के अन्य उपहारों को शामिल करने के लिए उपयोग किया जाता है। जावास्क्रिप्ट क्यों नहीं?

यदि आप चाहते हैं कि स्क्रिप्ट टैग स्वयं संलग्न हो तो आप ऐसा नहीं कर सकते हैं जैसा कि मैंने कहा, लेकिन एक विकल्प है, हालांकि स्मार्ट नहीं है। आप स्वयं समापन लिंक टैग और अपने जावास्क्रिप्ट का लिंक एक प्रकार का पाठ / जावास्क्रिप्ट का उपयोग कर सकते हैं और स्क्रिप्ट के रूप में संबंधित कर सकते हैं, नीचे कुछ इस प्रकार है:

<link type="text/javascript" rel ="script" href="/path/tp/javascript" />

4
मुझे यह पसंद है, यह "स्मार्ट" क्यों नहीं है, हालांकि?
जोश एम।

5
क्योंकि स्क्रिप्ट को लोड करने का काम करने के लिए एक पूर्वनिर्धारित स्क्रिप्ट टैग है .. आप किसी और चीज़ का उपयोग करके मामलों को भ्रमित क्यों करेंगे? नाखूनों में हथौड़े की चोट .. क्या जूता इस्तेमाल करना स्मार्ट होगा?
डेव लॉरेंस

8
@daveL - और हमारे पास <style>टैग हैं, फिर भी बाहरी सीएसएस फ़ाइलों के लिए लिंक टैग का उपयोग करें। लिंक टैग की परिभाषा: "<लिंक> टैग एक दस्तावेज़ और एक बाहरी संसाधन के बीच एक लिंक को परिभाषित करता है।" पूरी तरह से तार्किक लगता है कि लिंक टैग बाहरी सीएसएस या जेएस के लिए इस्तेमाल किया जाएगा ... जो कि इसके लिए है ... बाहरी फ़ाइलों में लिंक करना। ध्यान दें कि मैं कल्पना / क्रॉस-ब्रॉउज़नेस / आदि की बात नहीं कर रहा हूँ, मैं सीएसएस और जेएस दोनों में लाने के लिए लिंक टैग का उपयोग करने की तार्किक प्रकृति पर टिप्पणी कर रहा हूँ ... यह वास्तव में बहुत मायने रखता है अगर यह इस तरह से होता । यकीन नहीं होता कि जूता [उपमा] फिट बैठता है।
जिम्बो जॉनी

20

एक्सएमएल और एक्सएचटीएमएल के विपरीत, एचटीएमएल को स्वयं-समापन सिंटैक्स का कोई ज्ञान नहीं है। ब्राउज़र जो HTML के रूप में एक्सएचटीएमएल की व्याख्या करते हैं, उन्हें पता नहीं है कि/ वर्ण इंगित करता है कि टैग स्व-बंद होना चाहिए; इसके बजाय वे इसे एक खाली विशेषता की तरह व्याख्या करते हैं और पार्सर अभी भी सोचते हैं कि टैग 'खुला' है।

बस के रूप में <script defer>माना जाता है <script defer="defer">, <script />के रूप में व्यवहार किया जाता है <script /="/">


33
इस विवरण के रूप में सुरुचिपूर्ण, यह वास्तव में गलत है। यदि यह सही था, तो DOM में स्क्रिप्ट तत्व के लिए एक "/" विशेषता होगी। मैंने IE, फ़ायरफ़ॉक्स और ओपेरा की जाँच की है, और उनमें से कोई भी वास्तव में ऐसी विशेषता नहीं रखता है।
एलोहसी

11
/ एक मान्य विशेषता नाम वर्ण नहीं है, इसलिए इसे छोड़ दिया गया है। अन्यथा यह स्पष्टीकरण बहुत स्पष्ट है।
हॉलवेर्स -

1
वास्तव में, कुछ HTML पार्सर (और विशेष रूप से सत्यापनकर्ता) /NET (नल एंड टैग) निर्माण के एक हिस्से के रूप में व्याख्या कर सकते हैं ।
इलिडान्स 4 मोनिका को

18

इंटरनेट एक्सप्लोरर 8 और पुराने एक्सएचटीएमएल के लिए उचित माइम प्रकार का समर्थन नहीं करते हैं application/xhtml+xml। यदि आप XHTML की सेवा कर रहे हैं text/html, जो आपको इंटरनेट एक्सप्लोरर के इन पुराने संस्करणों के लिए कुछ भी करने के लिए है, तो इसे HTML 4.01 के रूप में व्याख्या किया जाएगा। आप किसी भी तत्व के साथ केवल छोटे वाक्यविन्यास का उपयोग कर सकते हैं जो समापन टैग को छोड़ने की अनुमति देता है। HTML 4.01 विशिष्टता देखें

एक्सएमएल 'शॉर्ट फॉर्म' की व्याख्या एक विशेषता के रूप में की जाती है, जिसे / (क्योंकि कोई समान चिह्न नहीं है) की व्याख्या "/" के निहित मूल्य के रूप में की जाती है। यह HTML 4.01 में सख्ती से गलत है - अघोषित विशेषताओं की अनुमति नहीं है - लेकिन ब्राउज़र इसे अनदेखा करेंगे।

IE9 और बाद में XHTML 5 का समर्थन किया गया application/xhtml+xml


IE 9 XHTML का समर्थन करता है और IE अब> 51% नहीं है। क्या आप अपना उत्तर अपडेट कर सकते हैं?
डेमियन येरिक

5

ऐसा इसलिए क्योंकि SCRIPT TAG एक VOID ELEMENT नहीं है।

एक में HTML दस्तावेज़ - शून्य तत्व नहीं है सब पर एक "अंतिम टैग" की जरूरत है!

में एक्सएचटीएमएल , सब कुछ, सामान्य है इसलिए वे सभी की जरूरत समाप्ति जैसे एक "बंद टैग"; सहित br, एक साधारण लाइन-ब्रेक, के रूप में <br></br>या उसके आशुलिपि <br />

हालाँकि, एक स्क्रिप्ट तत्व कभी भी शून्य या पैरामीट्रिक तत्व नहीं होता, क्योंकि स्क्रिप्ट टैग किसी भी चीज़ से पहले , एक ब्राउज़र निर्देश है, न कि डेटा विवरण घोषणा।

मुख्य रूप से, एक शब्दार्थ समाप्ति निर्देश, उदाहरण के लिए, एक "समापन टैग" केवल प्रसंस्करण निर्देशों के लिए आवश्यक है, जिन्हें शब्दार्थ एक सफल टैग द्वारा समाप्त नहीं किया जा सकता है। उदाहरण के लिए:

<H1>शब्दार्थ को निम्नलिखित द्वारा समाप्त नहीं किया जा सकता है <P>क्योंकि यह अपने स्वयं के शब्दार्थ को पर्याप्त रूप से आगे नहीं ले जाता है और इसलिए पिछले H1 अनुदेश सेट को समाप्त करता है। यद्यपि यह धारा को एक नई पैराग्राफ लाइन में तोड़ने में सक्षम होगा , लेकिन यह वर्तमान फ़ॉन्ट आकार और शैली लाइन-ऊंचाई को स्ट्रीम से नीचे ले जाने के लिए "मजबूत पर्याप्त" नहीं है , अर्थात एच 1 से लीक हो रहा है (क्योंकि पी में यह नहीं है) )।

यह कैसे और क्यों "/" (समाप्ति) सिग्नलिंग का आविष्कार किया गया है।

जेनेरिक नो-डिस्क्रिप्शन टर्मिनेशन टैग जैसे < />, सामने वाले कैस्केड से किसी भी एक गिरावट के लिए पर्याप्त होगा, उदाहरण के लिए: <H1>Title< />लेकिन यह हमेशा मामला नहीं होता है, क्योंकि हम "नेस्टिंग" में सक्षम होना चाहते हैं, स्ट्रीम के कई मध्यस्थ टैगिंग एक और झरने पर लपेटने / गिरने से पहले धार में। परिणामस्वरूप एक सामान्य टर्मिनेटर जैसे कि < />संपत्ति के लक्ष्य को समाप्त करने में सक्षम नहीं होगा। उदाहरण के लिए: <b>बोल्ड <i>बोल्ड-इटैलिक < /> इटैलिक </> सामान्य। निस्संदेह हमारे इरादे को सही पाने में विफल होगा और सबसे अधिक संभवत: इसे बोल्ड बोल्ड-इटैलिक बोल्ड सामान्य के रूप में व्याख्या करेगा ।

इस तरह से रैपर यानी कंटेनर की धारणा पैदा हुई। (ये धारणाएं इतनी समान हैं कि यह विचार करना असंभव है और कभी-कभी एक ही तत्व दोनों में हो सकता है। <H1>एक ही समय में दोनों आवरण और कंटेनर होते हैं। जबकि <B>केवल एक अर्थपूर्ण आवरण है)। हम एक सादे, कोई शब्दार्थ कंटेनर की आवश्यकता होगी। और निश्चित रूप से एक DIV तत्व का आविष्कार आया था।

DIV तत्व वास्तव में एक 2BR- कंटेनर है। बेशक सीएसएस के आने ने पूरी स्थिति को इससे अजीब बना दिया, अन्यथा यह कई महान परिणामों के साथ भ्रम पैदा कर सकता था - अप्रत्यक्ष रूप से!

क्योंकि सीएसएस के साथ आप नए आविष्कार किए गए डीआईवी के बीआर व्यवहार के बाद मूल पूर्व और आसानी से ओवरराइड कर सकते हैं, इसे अक्सर "कुछ भी नहीं कंटेनर" के रूप में संदर्भित किया जाता है। जो स्वाभाविक रूप से गलत है! DIV ब्लॉक तत्व हैं और अंत में सिग्नलिंग से पहले और बाद में दोनों की धारा को मूल रूप से तोड़ देंगे। जल्द ही WEB पेज DIV-itis से पीड़ित होने लगा। उनमें से ज्यादातर अभी भी हैं।

पूरी तरह से ओवरराइड करने और किसी भी HTML टैग के मूल व्यवहार को पूरी तरह से फिर से परिभाषित करने की क्षमता के साथ सीएसएस का आना, किसी भी तरह से HTML अस्तित्व के पूरे अर्थ को भ्रमित और धुंधला करने में कामयाब रहा ...

अचानक सभी HTML टैग्स दिखाई दिए जैसे कि अप्रचलित हो, उनके सभी मूल अर्थ, पहचान और उद्देश्य छीन लिए गए थे। किसी तरह आप इस धारणा को प्राप्त करेंगे कि उन्हें अब आवश्यकता नहीं है। कह रहे हैं: सभी डेटा प्रस्तुति के लिए एक एकल कंटेनर-आवरण टैग पर्याप्त होगा। बस आवश्यक विशेषताएँ जोड़ें। इसके बजाय सार्थक टैग क्यों नहीं हैं; जैसे ही आप जाते हैं टैग नामों को इन्वेंट करें और CSS को बाकी के साथ परेशान करें।

इस तरह से एक्सएचटीएमएल का जन्म हुआ और निश्चित रूप से महान कुंद, नए कामरेडों द्वारा बहुत ही प्रिय भुगतान किया गया और जो कुछ भी है, उसकी एक विकृत दृष्टि है और यह सब क्या है। W3C वर्ल्ड वाइड वेब से व्हाट वॉन्ट गलत, कॉमरेड्स तक गया? !!

HTML का उद्देश्य मानव प्राप्तकर्ता को सार्थक डेटा स्ट्रीम करना है।

सूचना देने के लिए।

औपचारिक भाग केवल सूचना वितरण की स्पष्टता की सहायता के लिए है। एक्सएचटीएमएल सूचना को मामूली विचार नहीं देता है। - यह करने के लिए, जानकारी बिल्कुल अप्रासंगिक है।

इस मामले में सबसे महत्वपूर्ण बात यह जानना और समझने में सक्षम है कि एक्सएचटीएमएल कुछ विस्तारित एचटीएमएल का सिर्फ एक संस्करण नहीं है , एक्सएचटीएमएल एक पूरी तरह से अलग जानवर है; आधार; और इसलिए उन्हें अलग रखना बुद्धिमानी है।


3

'सच एक्सएचटीएमएल', 'अशुद्ध एक्सएचटीएमएल' और एचटीएमएल के साथ-साथ सर्वर द्वारा भेजे गए माइम प्रकार के महत्व को पहले से ही यहां अच्छी तरह से वर्णित किया गया था । यदि आप इसे अभी आज़माना चाहते हैं, तो यहां लाइव पूर्वावलोकन के साथ सरल संपादन योग्य स्निपेट है जिसमें सक्षम ब्राउज़रों के लिए स्व-बंद स्क्रिप्ट टैग शामिल है:

div { display: flex; }
div + div {flex-direction: column; }
<div>Mime type: <label><input type="radio" onchange="t.onkeyup()" id="x" checked  name="mime"> application/xhtml+xml</label>
<label><input type="radio" onchange="t.onkeyup()" name="mime"> text/html</label></div>
<div><textarea id="t" rows="4" 
onkeyup="i.src='data:'+(x.checked?'application/xhtml+xml':'text/html')+','+encodeURIComponent(t.value)"
><?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[<!ENTITY x "true XHTML">]>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  <p>
    <span id="greet" swapto="Hello">Hell, NO :(</span> &x;.
    <script src="data:text/javascript,(g=document.getElementById('greet')).innerText=g.getAttribute('swapto')" />
    Nice to meet you!
    <!-- 
      Previous text node and all further content falls into SCRIPT element content in text/html mode, so is not rendered. Because no end script tag is found, no script runs in text/html
    -->
  </p>
</body>
</html></textarea>

<iframe id="i" height="80"></iframe>

<script>t.onkeyup()</script>
</div>

आपको Hello, true XHTML. Nice to meet you!textarea के नीचे देखना चाहिए ।

अक्षम ब्राउज़रों के लिए आप टैक्स्टेरिया की सामग्री को कॉपी कर सकते हैं और इसे .xhtml(या .xht) एक्सटेंशन के साथ फाइल के रूप में सहेज सकते हैं ( इस संकेत के लिए धन्यवाद ।)


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.