it-swarm.asia

لماذا تستخدم document.location.protocol بدلاً من url / prefixed العادي؟

على سبيل المثال ، يستخدم 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';
11
Metalshark

في الواقع ، لم يكن رقابة من قبل فريق GA!
محمل GA يقوم بتحميل برنامج نصي ، لذلك لا يتأثر خطأ التنزيل المزدوج على <link> أو @import للحصول على أوراق أنماط في IE7/IE8.

يستخدمون العامل الشرطي (الثلاثي) على document.location.protocol بسبب وجود خلل في حالة الحافة في IE6 يؤدي إلى ظهور مربع حوار أمان تحت إعدادات أمان معينة عند الطلب من غير -ss 'المجال الفرعي ،
IE6 security security-dialog image, source: http://paulirish.com/i/7b01.png
كما أوضح ذلك بول إيرش (الذي عمل مع مطور برنامج جافا سكريبت الرائد في 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. انظر لمزيد من التفاصيل .
3
GitaarLAB

يوجد على الأقل مشكلة واحدة في IE لأنه يتسبب في تنزيلات مزدوجة: http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download /

4
AlfonsoML

لقد أشرت بالفعل إلى الفرق في حالة Google Analytics ، أي أن الإصدار الآمن يعمل على https://ssl. بدلاً من http://www.. على الرغم من أن إصدارًا آمنًا من www قد يعمل ، إلا أنه قد يكون مختلفًا عن إصدار ssl:

  • شهادات مختلفة لإصدار SSL وإصدار www.
  • رمز مختلف في كل إصدار.
  • ملفات تعريف ارتباط مختلفة ، خاصة بمجال SSL.

لا أعرف ما إذا كان أي من هذه تنطبق على Google. من النظرة الأولى بدا الكود هو نفسه.

1
DisgruntledGoat

//www.google-analytics.com/ga.js ليس عنوان URL وفقًا لمعياره ، لأنه يفتقر إلى المخطط ، وهو إلزامي. إنه يعمل ويستخدم ، لكنه لا يزال غير مطابق لمعيار URL.

انظر RFC3986 §3:

مكونات المخطط والمسار مطلوبة ، على الرغم من أن المسار قد يكون فارغًا (بدون أحرف). عند وجود سلطة ، يجب أن يكون المسار فارغًا أو يبدأ بحرف شرطة مائلة ("/"). عندما تكون السلطة غير موجودة ، لا يمكن أن يبدأ المسار بحرفين مائلين ("//").

0
Patrick Mevzek

هذا المكدس الفائض الجواب يجعل بعض النقاط الجيدة.

سيكون من المهم تحديد البروتوكول بشكل صريح بحيث يتم تحميل الأصل المستهدف بشكل صحيح داخل مستند مفتوح من محرك أقراص محلي (file:) أو عند استخدام "iframe magic" (about:).

0
Andrew Ashbacher