Src और सामग्री के साथ एक स्क्रिप्ट-टैग का क्या अर्थ है?


122

Googles +1 बटन से उदाहरण:

<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
      {"parsetags": "explicit"}
</script>

स्क्रिप्ट टैग में एक src- गुण और सामग्री है। इसका क्या मतलब है और यह कैसे काम करता है?


जवाबों:


71

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

Google किसी विशिष्ट व्यवहार का भरोसा नहीं कर रहा है। चूंकि सामग्री सिर्फ एक वस्तु शाब्दिक (एक मूल्य) है, इसे निष्पादित करना वास्तव में एक मौन त्रुटि के अलावा कुछ भी नहीं करेगा। Google का कोड scriptटैग की सामग्री को स्वयं देखता है, और उसके आधार पर उसके व्यवहार को समायोजित करता है।


2
क्या डोम के माध्यम से जाने की तुलना में स्क्रिप्ट के लिए अपने स्वयं के स्क्रिप्ट टैग (विशेष रूप से) की सामग्री को देखने का एक चतुर तरीका है?
कार्ल केनचेल

11
उन सभी ब्राउज़रों पर, जिनके साथ मैंने काम किया है, यदि srcविशेषता मौजूद है, तो स्क्रिप्ट सामग्री को कभी निष्पादित नहीं किया जाएगा , और वास्तव में वास्तव में एक वस्तु शाब्दिक नहीं है, यह कोड एक SyntaxErrorनिष्पादित होने पर उत्पादन करेगा , यह बस "JSON पाठ" है जो स्क्रिप्ट का उपयोग करेगा बाद में खुद से।
सीएमएस

2
@ Karl एक बाहरी .js फ़ाइल के भीतर उपयोग किया जाता है, यह आपको वर्तमान में निष्पादित होने वाली सामग्री प्रदान करेगा <script> नोड: s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML; मुझे नहीं लगता कि स्क्रिप्ट नोड की सामग्री लाने का कोई तरीका है जो DOM को छूना शामिल नहीं करता है। ।
डिजिटलबाथ

@ सीएमएस IE को छोड़कर सभी ब्राउज़रों पर काम करता है। आप इसे यहां
जोस फेटी

1
@jose - आपका उदाहरण वह नहीं है जिसका सीएमएस उल्लेख कर रहा था। यदि कोड को अकेले स्टैंड स्टेटमेंट के रूप में चलाया जाता है, तो यह एक सिंटैक्स त्रुटि है। आपका उदाहरण (और Google का) केवल "काम करता है" क्योंकि स्क्रिप्ट तत्व की सामग्री src विशेषता के कारण अंतर्निर्मित है ।
रॉबिन

23

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

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


4
यह एक अच्छा विचार क्यों नहीं है? यदि किसी थर्ड पार्टी प्लगइन को इनिशियलाइज़ करने के लिए इसका उपयोग किया जाता है तो क्या होगा?
वाकिंगफ्रूट

13

HTML5 ड्राफ्ट विनिर्देश के अनुसार , विशेषताओं वाले <script>तत्वों में srcकेवल टिप्पणी-आउट कोड होना चाहिए, जिसका उद्देश्य स्क्रिप्ट के लिए दस्तावेज़ देना है। ऐसा नहीं लगता कि Google इस विनिर्देश के अनुरूप है।


13

स्क्रिप्ट लोड होने के बाद, यह अपनी सामग्री तक पहुंचने के लिए अपने स्क्रिप्ट टैग के अंदर दिखता है।

यह इस तरह से कुछ कोड का उपयोग करेगा:

var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);

जॉन रेजिग के सौजन्य से ।

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