Chrome ने इस जावास्क्रिप्ट फ़ाइल को निष्पादित करने से इनकार कर दिया


32

मेरे HTML पृष्ठ के प्रमुख में, मेरे पास है:

<script src="https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.js"></script>

जब मैं अपने ब्राउज़र में पृष्ठ लोड करता हूं (Google Chrome v 27.0.1453.116) और डेवलपर टूल सक्षम करता है, तो यह कहता है:

स्क्रिप्ट को ' https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.js ' से निष्पादित करने से मना कर दिया गया क्योंकि इसका MIME प्रकार ('पाठ / सादा') निष्पादन योग्य नहीं है, और सख्त MIME प्रकार की जाँच सक्षम है।

वास्तव में, स्क्रिप्ट नहीं चलेगी। Chrome को क्यों लगता है कि यह एक सादा पाठ फ़ाइल है? इसमें स्पष्ट रूप से एक .jsफ़ाइल एक्सटेंशन है।

चूंकि मैं एचटीएमएल 5 का उपयोग कर रहा हूं type, इसलिए मैंने इस विशेषता को छोड़ दिया, इसलिए मैंने सोचा कि समस्या पैदा हो सकती है। तो मैं जोड़ा type="text/javascript"करने के लिए <script>टैग, और एक ही परिणाम मिला। मैंने भी कोशिश की type="application/javascript"और अभी भी वही त्रुटि है।

फिर मैंने इसे type="text/plain"सिर्फ जिज्ञासा से बाहर बदलने की कोशिश की । ब्राउज़र ने एक त्रुटि वापस नहीं की, लेकिन निश्चित रूप से जावास्क्रिप्ट या तो नहीं चला।

अंत में मुझे लगा कि फ़ाइल नाम में अवधियों को ब्राउज़र बंद किया जा सकता है। इसलिए मेरे HTML कोड में, मैंने सभी अवधियों को URL एस्केप वर्ण में बदल दिया है %2E:

<script src="https://raw.github.com/cloudhead/less%2Ejs/master/dist/less-1%2E3%2E3.js"></script>

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

मुझे कैसे पता चलेगा कि लिंक की गई फ़ाइल वास्तव में जावास्क्रिप्ट प्रकार है?

जवाबों:


16

आपके पास जो समस्या है वह आपके नियंत्रण से बाहर है क्योंकि यह बताया गया है कि जिस तरह से आपने उल्लेख किया है उस रास्ते पर Github में होस्टिंग सेटअप है, एक्सटेंशन प्रकार न केवल कारक है जब यह फ़ाइलों को निष्पादित करने की बात आती है क्योंकि वेब होस्टिंग ओवर-शासन कर सकती है कि कैसे ब्राउज़र एक फ़ाइल प्रदान करता है।

यदि होस्ट करने के लिए सेटअप किया गया था तो आप .zip फ़ाइल रेंडरिंग .html फ़ाइल के रूप में कर सकते हैं, आप फायरबग का उपयोग करके और उसके खिलाफ हैडर रिस्पांस को देखकर स्वयं ही इसकी जांच कर सकते हैं कि क्या अनुरोध किया जा रहा है .... इसलिए यदि आप अनुरोध करते हैं एक जेएस फ़ाइल लेकिन हेडर प्रतिक्रिया एक अलग अपेक्षित मान लौटाती है तो ब्राउज़र हेडर प्रतिक्रिया का सम्मान करेंगे और न कि अनुरोध किया जा रहा है ...

कच्चे उपडोमेन पर जीथब होस्टिंग होस्ट करने वाला Content-Type text/plain; charset=utf-8MIME प्रकार के रूप में लौट रहा है, जिसका अर्थ है कि वह JS के रूप में व्यायाम नहीं करेगा, बल्कि कच्चे पाठ के रूप में, नीचे एक उदाहरण है कि आपको फ़ाइल रेंडर करने के लिए सर्वर को वापस जाने की क्या आवश्यकता होगी, और आगे नीचे है कोड जिसे जीथब द्वारा वापस किया जा रहा है।

जेएस माइम प्रकार का समर्थन करने वाला एक सर्वर कुछ इस तरह दिखाई देगा:

Accept-Ranges   bytes
Connection  Keep-Alive
Content-Encoding    gzip
Content-Length  31097
Content-Type    application/javascript
Vary    Accept-Encoding
Request Headersview source
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

और यह https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.jsहैडर के रूप में (रॉ व्यू) के रूप में जवाब दे रहा है।

Accept-Ranges   bytes
Connection  Keep-Alive
Content-Disposition inline
Content-Encoding    gzip
Content-Length  41354
Content-Transfer-Encoding   binary
Content-Type    text/plain; charset=utf-8

एर, क्या? तो तय क्या है?
पब्रम 15

2
@pabrams आपके नियंत्रण में एक उचित मेजबान का उपयोग कर ठीक या इस्तेमाल होता है rawgit
साइमन हैटर

25

Dec. 2018 संपादित करें

रॉगिट अब दुर्भावनापूर्ण उपयोग के कारण सूर्यास्त कर रहा है, इसलिए वे इसके बजाय निम्नलिखित सेवाओं में से एक का उपयोग करने की सलाह देते हैं:


मूल पोस्ट

Rawgithub.com उपयोगकर्ताओं को Git के "रॉ" संस्करणों को लेने और <script>टैग में प्रयोग करने योग्य URL में बदलने की अनुमति देता है । इसका उपयोग करना काफी आसान है, बस पहले .कच्चे URL से हटा दें । उदाहरण के लिए, यह:

https://raw.github.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js

में बदल जाएगा इस

https://rawgithub.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js

और फिर आप इसे <script>उपयुक्त प्रकार के साथ एक टैग में डालते हैं । यह सरल है!

वे अनुरोधों की संख्या को सीमित करते हैं क्योंकि यह केवल विकास के उद्देश्यों के लिए है, न कि उत्पादन के लिए।

2014 संपादित करें

जैसा कि रेनडिएरन ने उल्लेख किया है, कच्चीगुथ अब केवल कच्चा है, इसलिए नई स्क्रिप्ट लिंक होगी

https://rawgit.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js

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

1
मैंने यह कभी नहीं कहा ...
Zach Saucier

1
नोट - यह अब rawgit.com पर रीडायरेक्ट हो गया है। और यह काम करता है!
रेनडिएन

1
यह साइट अब अनुरोधों के लिए 403s देती है और हेडर आपको बताते हैं कि यह सूर्यास्त है।
माइकल

@Michael दु: खी :( सौभाग्य rawgit, तो मैं प्रदान की उन के साथ मेरा उत्तर अद्यतन ने अपनी वेबसाइट पर कुछ विकल्प प्रदान की है।
ज़ैक Saucier

6

फ़ाइल एक्सटेंशन अप्रासंगिक है, यह सामग्री-प्रकार का हेडर है जो मायने रखता है, और वह फ़ाइल एक text/plainसामग्री प्रकार (जो गितुब के "कच्चे" दृश्य का उद्देश्य है) के साथ परोसा जाता है ।

आपको वास्तव में अपनी साइट पर स्थानीय रूप से फ़ाइल की एक प्रति डाउनलोड करनी चाहिए और इसे वहां से शामिल करना चाहिए। यहां तक ​​कि अगर यह Github से काम करता है, क्योंकि आप जेएस फाइल को अतुल्यकालिक रूप से लोड नहीं कर रहे हैं, तो उस <script>टैग को अपने पेज हेडर में डालने से आपकी साइट जीथब की उपलब्धता पर निर्भर हो जाती है।


8
"आपको वास्तव में फ़ाइल की एक प्रति अपनी साइट पर स्थानीय रूप से डाउनलोड करनी चाहिए और इसे वहां से शामिल करना चाहिए", कुंजी। इसका मतलब GitHub से होस्ट होना नहीं है।
ऑक्टोपस

@ ऑक्टोपस हम उस की एक स्थानीय प्रति डाउनलोड करने और संग्रहीत करने के लिए कॉन्फ़िगर कर सकते हैं और फिर स्क्रिप्ट को प्रोग्रामेटिक रूप से इंगित कर सकते हैं ..
सुदीप भंडारी

2

यह एक जानबूझकर विशेषता है जिसे कुछ XSS हमलों को रोकने के लिए डिज़ाइन किया गया है ।

जैसा कि माइक वेस्ट बताते हैं , raw.github.comसीडीएन के रूप में उपयोग न करें ; का उपयोग GitHub पेज बजाय।

इसके अलावा, स्पष्ट रूप से अनारक्षित वर्ण एन्कोडिंग URL को कैसे व्यवहार किया जाता है यह नहीं बदलेगा।


1

जैसा कि बाईब इस मुद्दे को इंगित करता है कि raw.github.com द्वारा दी गई लगभग सभी सामग्री को एक पाठ फ़ाइल के रूप में नीचे भेजा जाता है - इस तरह से आपके ब्राउज़र में सादे पाठ में सामग्री को किसी अन्य एप्लिकेशन या मुद्दों के बिना प्रस्तुत किया जाता है। अन्यथा आप उस स्थिति में पहुंच जाएंगे जहां एक .js फ़ाइल को देखने का प्रयास करने से ब्राउज़र आपको दिखाने के बजाय इसे चलाने का प्रयास कर सकता है।

उसके शीर्ष पर, न तो जीथब और न ही पृष्ठ.जीथब सीडीएन बनने की कोशिश कर रहे हैं। आपको वास्तव में या तो होना चाहिए:

  1. फ़ाइल को स्वयं होस्ट करें, यह इतना बड़ा नहीं है।
  2. अपनी साइट पर इस और अन्य स्थिर फ़ाइलों के लिए एक समर्पित CDN का उपयोग करें।
  3. Cdnjs.com जैसी किसी चीज़ का उपयोग करें, जिसमें विभिन्न संस्करण उपलब्ध हैं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.