على سبيل المثال ، يستخدم Google Analytics 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>
SSL. النطاق الفرعي هو وسيطة صامتة مثل https://www.google-analytics.com/ga.js يعمل بشكل جيد تمامًا.
معرفة جوجل على الأرجح هذا ليس رقابة. هل هناك مشكلة في بعض المتصفحات التي لا تدعم بروتوكول// تكريم الاختصار أو هل هناك شيء آخر أفتقده؟
التحرير: هذا لا ينطبق فقط على Google Analytics (مثال لنطاق فرعي مختلف). يظهر الشيء نفسه على صفحة واجهة برمجة تطبيقات Font Loader :
wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
'://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
في الواقع ، لم يكن رقابة من قبل فريق GA!
محمل GA يقوم بتحميل برنامج نصي ، لذلك لا يتأثر خطأ التنزيل المزدوج على <link>
أو @import
للحصول على أوراق أنماط في IE7/IE8.
يستخدمون العامل الشرطي (الثلاثي) على document.location.protocol
بسبب وجود خلل في حالة الحافة في IE6 يؤدي إلى ظهور مربع حوار أمان تحت إعدادات أمان معينة عند الطلب من غير -ss 'المجال الفرعي ،
كما أوضح ذلك بول إيرش (الذي عمل مع مطور برنامج جافا سكريبت الرائد في Google Analytics في هذا الشأن) على مدونته: https://www.paulirish.com/2010/the-protocol-relative -url / التي أقتبس منها أدناه:
2011.01.23: لكن ... ماذا عن باستخدام هذا في مقتطف Google Analytics ؟نعم بالطبع ، لن يكون ذلك جميلًا ... لذا عملت مع مطور برامج جافا سكريبت Google Analytics (الله ، أحب العمل في google) لمعرفة ما إذا كان بإمكاننا القيام بذلك ... اتضح أننا لا نستطيع ذلك. يوجد خطأ في edgecase في IE6 يؤدي إلى تفجير مربع حوار ... تحت بعض إعدادات الأمان (غير متأكد إذا كانت الإعدادات الافتراضية) عند الطلب من المجال الفرعي غير التابع لـ sl. قطة هنا . لذا لا تتردد في إخراج 40 بايت من GA مقتطفك إذا كنت لا تهتم بـ IE6 .. وإلا فستحتاج إلى عامل التشغيل الثلاثي. `:)`2011/12/24. ينسجم إريك لو (من فريق IE) حول سبب عدم تشغيل IE6 بشكل جيد GA ...السبب في أن هذا لا يعمل في IE6 هو أن الخادم يستخدم SNI لاستنتاج الشهادة المراد إرجاعها. XP (وبالتالي IE6) لا يدعم SNI في مكدس HTTPS. انظر لمزيد من التفاصيل .
يوجد على الأقل مشكلة واحدة في IE لأنه يتسبب في تنزيلات مزدوجة: http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download /
لقد أشرت بالفعل إلى الفرق في حالة Google Analytics ، أي أن الإصدار الآمن يعمل على https://ssl.
بدلاً من http://www.
. على الرغم من أن إصدارًا آمنًا من www قد يعمل ، إلا أنه قد يكون مختلفًا عن إصدار ssl:
لا أعرف ما إذا كان أي من هذه تنطبق على Google. من النظرة الأولى بدا الكود هو نفسه.
//www.google-analytics.com/ga.js
ليس عنوان URL وفقًا لمعياره ، لأنه يفتقر إلى المخطط ، وهو إلزامي. إنه يعمل ويستخدم ، لكنه لا يزال غير مطابق لمعيار URL.
انظر RFC3986 §3:
مكونات المخطط والمسار مطلوبة ، على الرغم من أن المسار قد يكون فارغًا (بدون أحرف). عند وجود سلطة ، يجب أن يكون المسار فارغًا أو يبدأ بحرف شرطة مائلة ("/"). عندما تكون السلطة غير موجودة ، لا يمكن أن يبدأ المسار بحرفين مائلين ("//").
هذا المكدس الفائض الجواب يجعل بعض النقاط الجيدة.
سيكون من المهم تحديد البروتوكول بشكل صريح بحيث يتم تحميل الأصل المستهدف بشكل صحيح داخل مستند مفتوح من محرك أقراص محلي (file:
) أو عند استخدام "iframe magic" (about:
).