यह बस एक <script>
टैग द्वारा संदर्भित किसी भी फाइल की सामग्री को प्राप्त करने के लिए संभव नहीं है। यह एक अच्छा कारण है: ऐसा करने से आप एक्सएचआर की समान उत्पत्ति नीति को बाधित कर सकते हैं।
पर विचार करें:
<script src="https://www.example.com/private/api/getAuthToken" id="s"></script>
आप respnse के पाठ पहुँच पाता, तो आप ऐसा करने में सक्षम हो जाएगा:
var stolenAuthToken = $('#s').text();
कि स्पष्ट रूप से खराब है। इसलिए, आपको <script>
टैग्स द्वारा लाए गए किसी भी चीज़ की सामग्री को पढ़ने की अनुमति नहीं है।
आपका विशेष स्थिति से एक अपेक्षाकृत हाल ही में शुरू की change जटिल है जहां पार मूल स्क्रिप्ट में त्रुटियों अपने पृष्ठ के onerror
हैंडलर के लिए किसी भी उपयोगी जानकारी मान्य नहीं करते। (अनिवार्य रूप से, यह एक सूचना प्रकटीकरण सुरक्षा छेद को पैच करने के लिए किया गया था जो किसी दुर्भावनापूर्ण साइट को यह अनुमान लगाने की अनुमति देता है कि आप कुछ प्रसिद्ध साइटों में लॉग इन हैं या नहीं, अन्य चीजों के साथ।)
इसका मतलब है कि आपको कोई उपयोगी जानकारी नहीं मिलती CDN की मेजबानी की स्क्रिप्ट से त्रुटियों के बारे में है, तो another change पूर्ण त्रुटि विवरण एक onerror
हैंडलर को पारित करने के लिए अनुमति देता है में शामिल होना एक CDN (या अन्य गैर-एक ही मूल के) सर्वर के लिए CORS के उपयोग की अनुमति के लिए बनाया गया था।
हम (फेसबुक) window.onerror
म्यूट करने #363897 में लागू व्यवहार को निष्क्रिय करने के लिए एक तंत्र की जरूरत है। हमारे स्थैतिक स्क्रिप्ट संसाधनों को मुख्य साइट से किसी भिन्न डोमेन के तहत एक सीडीएन पर परोसा जाता है। चूंकि ये डोमेन भिन्न हैं क्योंकि हम एक्स-डोमेन तर्क से दूर हो रहे हैं जो हमें ब्राउज़र त्रुटियों के बारे में उपयोगी जानकारी एकत्र करने से रोकता है।
जंगली (फ़ायरफ़ॉक्स और वेबकिट ब्राउज़र में) में यह "फीचर" व्यापक रूप से पर्याप्त रूप से अपनाया गया है कि उत्पादन में जो बेजोड़ अपवाद हम देखते हैं, उनमें अब कोई कार्रवाई योग्य जानकारी नहीं है।
crossorigin
attribute (मूल रूप से <img>
लिए करना) आपके द्वारा निर्दिष्ट है कि एक संसाधन CORS नियमों के साथ लोड किया जा चाहिए अनुमति देता है। इसे मोज़िला, WebKit, और Chrome द्वारा कार्यान्वित किया गया है।
<script src="http://example.com/xdomainrequest" crossorigin="anonymous"></script>
दुर्भाग्य से आप के लिए
, मेरे testing में, मैंने पाया कि गूगल CDN नहीं CORS हेडर भेज करता है।
GET http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js HTTP/1.1
Host: ajax.googleapis.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://fiddle.jshell.net/josh3736/jm2JU/show/
Origin: http://fiddle.jshell.net
Pragma: no-cache
Cache-Control: no-cache
HTTP/1.1 200 OK
Vary: Accept-Encoding
Content-Type: text/javascript; charset=UTF-8
Last-Modified: Tue, 13 Nov 2012 19:53:02 GMT
Date: Wed, 02 Jan 2013 22:54:25 GMT
Expires: Thu, 02 Jan 2014 22:54:25 GMT
X-Content-Type-Options: nosniff
Server: sffe
Content-Length: 93637
X-XSS-Protection: 1; mode=block
Cache-Control: public, max-age=31536000
Age: 169036
...
नोट अनुरोध (एक CORS अनुरोध का संकेत) में Origin
शीर्षलेख की उपस्थिति, और जवाब में एक Access-Control-Allow-Origin
हैडर के अभाव। इस प्रकार, भले ही आप crossorigin
विशेषता डालते हैं, तो सीओआरएस चेक विफल हो जाएगी, और आपकी स्क्रिप्ट को स्क्रब किए गए त्रुटि विवरण प्राप्त होंगे।
Google सीडीएन सर्वर पर सीओआरएस सक्षम करने के लिए three-year-old issue है। मैं अपनी सांस नहीं पकड़ूंगा।
tldr: यदि आप सार्थक त्रुटि संदेश चाहते हैं, तो आप, सभी जावास्क्रिप्ट खुद की मेजबानी करना होगा एक ही मूल पर।
थोड़े मुझे क्या लगा। मैं देखूंगा कि क्या मैं प्रभावित उपयोगकर्ताओं के साथ सीधे जांच कर सकता हूं। धन्यवाद। – Pyro979
तो विस्तृत, उत्कृष्ट पोस्ट! – potench