आप सादा // उपसर्गित url के बजाय document.location.protocol का उपयोग क्यों करेंगे?


12

उदाहरण के लिए, Google Analytics ट्रैकिंग के लिए boilerplate में document.location.protocol का उपयोग करता है:

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

के बजाय

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = '//www.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

एसएसएल। उप-डोमेन एक मूक तर्क है क्योंकि https://www.google-analytics.com/ga.js पूरी तरह से अच्छी तरह से काम करता है।

Google को यह जानना सबसे अधिक संभावना नहीं है। वहाँ कुछ ब्राउज़रों के साथ एक मुद्दा है / // शॉर्टहैंड को सम्मानित करने वाले प्रोटोकॉल का समर्थन नहीं कर रहा है या कुछ और है जो मैं याद कर रहा हूं?

EDIT: यह सिर्फ Google Analytics (विभिन्न उप-डोमेन उदाहरण) पर लागू नहीं होता है। फ़ॉन्ट लोडर API पेज पर भी यही बात दिखाई देती है :

wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
    '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';

Google को कुछ करने के बजाय तकनीकी समस्या के बारे में पूछने के लिए अपने प्रश्न को समझने के लिए एक बेहतर प्रतिक्रिया मिल सकती है। आप दूसरे को वास्तविक जवाब नहीं देंगे (जब तक कि हम यहां एक और गूगलर की प्रतिक्रिया नहीं देखेंगे, जो शांत होगा)।
जेसनब्रिच

इसे अधिक अज्ञेय बनाने के प्रयास में थोड़ा संपादित करें। कोई अन्य सुझाव?
मेटलहार्क 4:00

जवाबों:


3

वास्तव में, यह GA टीम द्वारा निरीक्षण नहीं था !
जीए लोडर भार एक स्क्रिप्ट है, ताकि एक पर दो बार डाउनलोड बग द्वारा प्रभावित नहीं होता <link>या @importIE7 / IE8 में एक शैली के लिए।

document.location.protocol IE6 में एज-केस बग के कारण वे सशर्त (टर्नरी) ऑपरेटर का उपयोग करते हैं , जो पॉल-आयरिश (जो काम करता है) द्वारा समझाया गया गैर-lll ’उपडोमेन से अनुरोध करने पर कुछ सुरक्षा सेटिंग्स के तहत पॉप-डायलॉग का कारण बनता है। इस विषय पर Google Analytics जावास्क्रिप्ट लीड डेवलपर के साथ) अपने ब्लॉग पर: https://www.paulirish.com/2010/the-protocol-relative-url/ जिसमें से मैं नीचे उद्धृत करता हूं:
IE6 सुरक्षा सुरक्षा-संवाद छवि, स्रोत: http://paulirish.com/i/7b01.png

2011.01.23: लेकिन ... Google Analytics स्निपेट पर इसका उपयोग करने के बारे में क्या ?
हां, यह अच्छा नहीं होगा ... इसलिए मैंने Google Analytics जावास्क्रिप्ट लीड डेवलपर (भगवान, मुझे Google पर काम करना पसंद है) के साथ काम किया, यह देखने के लिए कि क्या हम ऐसा कर सकते हैं ... पता चलता है कि हम नहीं कर सकते। IE6 में एक edgecase बग है, जो संवाद को उड़ाने का कारण बनता है ... गैर-'ssl 'उपडोमेन से अनुरोध करने पर कुछ सुरक्षा सेटिंग्स (अनिश्चित होने पर वे डिफ़ॉल्ट हैं) के तहत। यहाँ स्क्रीनशॉट । यदि आप IE6 के बारे में परवाह नहीं करते हैं तो अपने जीए स्निपेट से 40 बाइट्स लेने के लिए स्वतंत्र महसूस करें। अन्यथा आपको उस टर्नरी ऑपरेटर की आवश्यकता होगी। `:)`
2011/12/24। एरिक लॉ (IE टीम से) क्यों IE6 अच्छी तरह से GA नहीं खेलता है पर झंकार ...
IE6 में यह काम नहीं करता है इसका कारण यह है कि सर्वर SNI का उपयोग कर रहा है ताकि प्रमाणपत्र वापस आ सके। XP (और इस प्रकार IE6) HTTPS स्टैक में SNI का समर्थन नहीं करता हैविवरण के लिए देखें


1

आपने Google Analytics के मामले में पहले से ही अंतर को इंगित कर दिया है, अर्थात https://ssl.इसके बजाय सुरक्षित संस्करण चालू है http://www.। जबकि www का सुरक्षित संस्करण काम कर सकता है, यह ssl संस्करण के लिए भी भिन्न हो सकता है:

  • एसएसएल संस्करण और www संस्करण के लिए विभिन्न प्रमाण पत्र।
  • प्रत्येक संस्करण पर अलग कोड।
  • एसएसएल डोमेन के लिए विशिष्ट, विभिन्न कुकीज़ सेट।

मुझे नहीं पता कि इनमें से कोई भी Google पर लागू होता है या नहीं। एक नज़र से कोड समान दिखता था।


एक अन्य उदाहरण होगा फॉन्ट लोडर कोड .google.com/apis/webfonts/docs/webfont_loader.html यहाँ डोमेन में कोई अंतर नहीं है। उनके कोड का प्रत्येक बॉयलरप्लेट उदाहरण उसी पैटर्न का अनुसरण करता है।
मेट्सहार्क

उस स्थिति में, वे उसी डोमेन का उपयोग कर रहे हैं। शायद कुछ पुरातन ब्राउज़र हैं जो //प्रोटोकॉल को नहीं पहचानते हैं?
असंतुष्टGoat

यह सोच थी, लेकिन कौन से, अधिक महत्वपूर्ण बात यह है कि वे जो वेब फ़ॉन्ट का समर्थन करते हैं? क्या यह अधिक समानांतर व्यवहार (क्वांटम भौतिकी शैली की अनुमति देता है, प्रोटो को पढ़कर यह ब्राउज़र की स्थिति को बदल देता है)? मैंने पूरी तरह से परीक्षण किया है और तर्क देखना अभी बाकी है ...
मेटल्सहार्क

0

यह स्टैक ओवरफ्लो उत्तर कुछ अच्छे अंक बनाता है।

यह स्पष्ट रूप से प्रोटोकॉल निर्दिष्ट करने के लिए महत्वपूर्ण होगा ताकि एक स्थानीय ड्राइव ( file:) या "आइफ्रेम जादू" ( about:) का उपयोग करते समय एक दस्तावेज़ के भीतर लक्षित परिसंपत्ति सही ढंग से भरी हुई हो ।


0

//www.google-analytics.com/ga.jsअपने मानक के अनुसार URL नहीं है, क्योंकि इसमें योजना का अभाव है, जो अनिवार्य है। यह काम करता है और इसका उपयोग किया जाता है, लेकिन यह URL मानक के अनुरूप नहीं है।

RFC3986 §3 देखें:

योजना और पथ घटकों की आवश्यकता होती है, हालांकि पथ खाली हो सकता है (कोई वर्ण नहीं)। जब अधिकार मौजूद होता है, तो रास्ता या तो खाली होना चाहिए या स्लैश ("/") वर्ण से शुरू होना चाहिए। जब प्राधिकरण मौजूद नहीं है, तो पथ दो स्लैश वर्णों ("//") से शुरू नहीं हो सकता है।


इस योजना की आवश्यकता नहीं है जहां यह ब्राउज़रों में समान है।
मेटल्सहार्क

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