Neden düz // ön ekli URL'ler yerine document.location.protocol kullanıyorsunuz?


12

Örneğin, Google Analytics, izleme için ısıtıcı plağında document.location.protocol kullanır:

<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>

onun yerine

<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 mükemmel bir şekilde çalıştığından , alt alan bir sessiz argümandır .

Google'ı bilmek büyük olasılıkla bir gözetim değildir. Belirli tarayıcılarda, stenoyu onurlandıran // protokolünü desteklemeyen bir sorun var mı veya eksik başka bir şey var mı?

EDIT: Bu yalnızca Google Analytics için geçerli değildir (farklı alt alan adı örneği). Aynı şey Font Loader API sayfasında da görünür :

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

Google'ın neden bir şey yaptığını değil, teknik sorun hakkında soru sormak için sorunuzu yeniden düzenleyerek daha iyi bir yanıt alabilirsiniz. İkincisine gerçek bir cevap alamayacaksınız (burada başka bir Google çalışanı yanıtı görmedikçe, bu harika olurdu).
JasonBirch

Daha agnostik hale getirmek için hafif bir düzenleme. Başka öneriniz var mı?
Metalshark

Yanıtlar:


3

Gerçekten de, GA Ekibi tarafından bir gözetim değildi !
GA yükleyici bir komut dosyası yükler, bu <link>da @importIE7 / IE8'deki bir veya stil sayfalarındaki çift ​​indirme hatasından etkilenmez .

document.location.protocol IE6'da , İrlandalı olmayan alt alan adından istekte bulunurken bir güvenlik iletişim kutusunun belirli güvenlik ayarları altında açılmasına neden olan kenar durumu hatası nedeniyle koşullu (üçlü) işleci kullanıyorlar. bu konuda Google Analytics javascript baş geliştiricisi ile birlikte) blogunda: https://www.paulirish.com/2010/the-protocol-relative-url/ aşağıda alıntı yaptığım:
IE6 güvenlik güvenlik iletişim kutusu resmi, kaynak: http://paulirish.com/i/7b01.png

2011.01.23: Ama ... bunu Google Analytics snippet'inde kullanmaya ne dersiniz ?
Evet, elbette bu hoş olmaz ... Bu yüzden, bunu yapıp yapamayacağımızı görmek için Google Analytics javascript baş geliştiricisi (Tanrı, google'da çalışmayı seviyorum) ile çalıştım ... IE6'da, 'sl' olmayan alt alan adından istekte bulunurken bazı güvenlik ayarları (varsayılan olup olmadıklarından emin değil) altında bir iletişim kutusunun patlamasına neden olan bir edgecase hatası var. burada ekran görüntüsü . IE6'yı önemsemiyorsanız GA snippet'inizden 40 bayt almaktan çekinmeyin .. aksi takdirde bu üçlü operatöre ihtiyacınız olacak. ':) `
2011/12/24. Eric Law (IE ekibinden) IE6'nın neden GA'yı iyi oynamadığına karar veriyor ...
Bunun IE6'da çalışmamasının nedeni, sunucunun hangi sertifikanın döndürüleceğini belirlemek için SNI kullanmasıdır. XP (ve dolayısıyla IE6) HTTPS yığınında SNI'yi desteklemez . Ayrıntılar için bakınız .


1

Zaten Google Analytics'in durumunda farkını işaret, güvenli sürümü üzerinde yani o https://ssl.yerine http://www.. Www güvenli bir sürümü çalışabilir, ancak ssl sürümü farklı olabilir:

  • SSL sürümü ve www sürümü için farklı sertifikalar.
  • Her sürümde farklı kod.
  • SSL etki alanına özgü farklı çerezler kümesi.

Bunlardan herhangi birinin Google için geçerli olup olmadığını bilmiyorum. Bir bakışta kod aynı görünüyordu.


Başka bir örnek, code.google.com/apis/webfonts/docs/webfont_loader.html yazı tipi yükleyici olacaktır. Burada etki alanında fark yoktur. Kodlarının her kazan plakası örneği aynı modeli izler.
Metalshark

Bu durumda, aynı etki alanını kullanıyorlar. Belki //protokolü tanımayan bazı eski tarayıcılar vardır ?
DisgruntledGoat

Düşünme buydu, ama hangileri, daha önemlisi hangileri web yazı tipini destekliyor? Daha paralel davranışlara izin veriyor mu (kuantum fizik stili, protokolü okuyarak tarayıcının durumunu değiştiriyor)? Ben iyice test ettik ve henüz mantığı görmek için ...
Metalshark

0

Bu Yığın Taşması yanıtı bazı iyi noktaları ifade eder.

Hedef öğenin yerel bir sürücüden ( file:) açılan bir belgeye veya "iframe magic" ( about:) kullanılırken doğru şekilde yüklenmesi için protokolü açıkça belirtmek önemlidir .


0

//www.google-analytics.com/ga.jszorunlu olan şemadan yoksun olduğu için standardı başına bir URL değildir. Çalışır ve kullanılır, ancak URL standardına uymaz.

Bkz. RFC3986 §3:

Şema ve yol bileşenleri gereklidir, ancak yol boş olabilir (karakter yok). Yetki mevcut olduğunda, yol ya boş olmalı ya da eğik çizgi ("/") karakteri ile başlamalıdır. Otorite yoksa, yol iki eğik çizgi karakteriyle ("//") başlayamaz.


Şema, tarayıcılarda aynı olduğunda gerekli değildir.
Metalshark

Lütfen RFC'yi okuyun: şema tüm URL'lerde zorunludur. Bu işe yarayan şeyden bağımsızdır, standart sadece aksini söyler ve vahşi doğada sapmalar vardır.
Patrick Mevzek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.