it-swarm-eu.dev

Proč byste použili document.location.protocol místo obyčejných // předponovaných URL?

Google Analytics například používá document.location.protocol v kotli pro sledování:

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

namísto

<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. subdoména je mute argument, protože https://www.google-analytics.com/ga.js funguje perfektně.

Znalost Google s největší pravděpodobností není přehlížením. Existuje problém s některými prohlížeči, které nepodporují // protokol ctít zkratku nebo je něco jiného, ​​co mi chybí?

ÚPRAVA: Toto se nevztahuje pouze na Google Analytics (jiný příklad v jiné doméně). Totéž se objeví na stránka API Loader API :

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

Ve skutečnosti to nebyl ne dohled týmem GA!
Zavaděč GA načte skript, takže na to nemá vliv chyba dvojitého stahování na <link> nebo @import pro šablony stylů v IE7/IE8.

Používají podmíněný (ternární) operátor na document.location.protocol kvůli chybě Edge-case v IE6, která způsobí, že se dialogové okno zabezpečení objeví pod určitými nastaveními zabezpečení při vyžádání od -'ssl 'subdoména ,
IE6 security security-dialog image, source: http://paulirish.com/i/7b01.png
jak vysvětlil Paul Irish (který v této věci spolupracoval s hlavním vývojářem javascriptu Google Analytics v této záležitosti) na svém blogu: https://www.paulirish.com/2010/the-protocol-relative -url / , ze kterého cituji níže:

2011.01.23: Ale ... a co pomocí tohoto na fragmentu Google Analytics ?
Ano, samozřejmě, nebylo by to hezké ... Takže jsem pracoval s vedoucím vývojářem javascriptu Google Analytics (Bože, miluji práci na google), abych zjistil, jestli bychom to mohli udělat ... dopadá to, že nemůžeme. V IE6 je chyba na hraně, která způsobí, že se dialog vyhodí do povětří ... pod některými nastaveními zabezpečení (pokud si nejste jisti, zda jsou výchozí), při žádosti o subdoménu, která není'ssl '. snímek obrazovky zde . Pokud tedy nezáleží na IE6, klidně si z útržku GA stáhnete 40 bajtů .. jinak budete potřebovat ternárního operátora. `:)`
2011.12.24. Eric Law (z týmu IE) upozorňuje na to, proč IE6 nehraje dobře GA ...
Důvod, proč to nefunguje v IE6, je, že server používá SNI k odvození, jaký certifikát vrátit. XP (a tedy IE6) nepodporuje SNI v zásobníku HTTPS. Viz podrobnosti .
3
GitaarLAB

Alespoň má jeden problém v IE, protože způsobuje dvojité stahování: http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download /

4
AlfonsoML

Už jste poukázali na rozdíl v případě Google Analytics, konkrétně v tom, že zabezpečená verze je na https://ssl. místo http://www.. I když bezpečná verze www může fungovat, může se lišit od verze ssl:

  • Různé certifikáty pro verzi ssl a www.
  • Jiný kód pro každou verzi.
  • Různé soubory cookie, specifické pro doménu SSL.

Nevím, zda se však některé z nich týkají společnosti Google. Z pohledu vypadal kód stejný.

1
DisgruntledGoat

//www.google-analytics.com/ga.js není URL podle svého standardu, protože postrádá schéma, které je povinné. Funguje a používá se, ale nadále neodpovídá standardu URL.

Viz RFC3986 §3:

Komponenty schématu a cesty jsou povinné, cesta však může být prázdná (žádné znaky). Je-li k dispozici oprávnění, musí být cesta buď prázdná, nebo musí začínat lomítkem ("/"). Pokud oprávnění není k dispozici, cesta nemůže začínat dvěma lomítky („//“).

0
Patrick Mevzek

Toto přetečení zásobníku odpověď přináší několik dobrých bodů.

Bylo by důležité explicitně specifikovat protokol, aby bylo cílové zařízení načteno správně v dokumentu otevřeném z lokální jednotky (file:) nebo při použití „magie iframe“ (about:).

0
Andrew Ashbacher