it-swarm.com.de

Warum sollten Sie document.location.protocol anstelle von // einfachen URLs mit Präfix verwenden?

Zum Beispiel verwendet Google Analytics document.location.protocol im Boilerplate für das Tracking:

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

anstatt von

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

Die ssl. Sub-Domain ist ein stummes Argument, da https://www.google-analytics.com/ga.js einwandfrei funktioniert.

Google zu kennen, ist höchstwahrscheinlich kein Versehen. Gibt es ein Problem mit bestimmten Browsern, die das // Protokoll für Kurzformulare nicht unterstützen, oder fehlt mir noch etwas?

BEARBEITEN: Dies gilt nicht nur für Google Analytics (anderes Sub-Domain-Beispiel). Dasselbe erscheint auf der Seite Font Loader API :

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

In der Tat war es kein Versehen durch das GA Team!
Der GA-Loader lädt ein Skript, sodass dies nicht durch den Doppel-Download-Fehler in einem <link> oder @import für Stylesheets in IE7/IE8 beeinträchtigt wird.

Sie verwenden den bedingten (ternären) Operator für document.location.protocol, da in IE6 ein Edge-Case-Fehler aufgetreten ist, der dazu führt, dass ein Sicherheitsdialog unter bestimmten Sicherheitseinstellungen angezeigt wird, wenn eine Anforderung von non erfolgt -'ssl 'Subdomain ,
IE6 security security-dialog image, source: http://paulirish.com/i/7b01.png
wie von Paul Irish (der in dieser Angelegenheit mit dem JavaScript-Hauptentwickler von Google Analytics zusammengearbeitet hat) in seinem Blog erklärt: https://www.paulirish.com/2010/the-protocol-relative -url / wovon ich unten zitiere:

2011.01.23: Aber ... wie wäre es mit dies wird im Google Analytics-Snippet verwendet ?
Ja, natürlich, wäre das nicht nett ... Also habe ich mit dem Javascript-Entwickler von Google Analytics zusammengearbeitet (Gott, ich liebe es, bei Google zu arbeiten), um zu sehen, ob wir dies tun können ... es stellt sich heraus, dass wir das nicht können. Es gibt einen Edgecase-Fehler in IE6, der dazu führt, dass ein Dialogfeld unter bestimmten Sicherheitseinstellungen (nicht sicher, ob sie die Standardeinstellung sind) beim Anfordern von der Nicht-SSL-Unterdomäne in die Luft springt. Screenshot hier . Zögern Sie nicht, Ihrem GA Snippet 40 Bytes zu entziehen, wenn Sie sich nicht für IE6 interessieren. Andernfalls benötigen Sie diesen ternären Operator. `:)`
2011.12.24. Eric Law (vom IE Team) schlägt vor, warum IE6 nicht gut GA spielt ...
Der Grund, warum dies in IE6 nicht funktioniert, ist, dass der Server SNI verwendet, um abzuleiten, welches Zertifikat zurückgegeben werden soll. XP (und damit IE6) unterstützt SNI im HTTPS-Stack nicht. Einzelheiten siehe .
3
GitaarLAB

Mindestens ein Problem in IE, da dadurch doppelte Downloads verursacht werden: http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download /

4
AlfonsoML

Sie haben bereits auf den Unterschied bei Google Analytics hingewiesen: Die sichere Version befindet sich auf https://ssl. anstelle von http://www.. Während eine sichere Version des WWW funktioniert, kann sie sich auch von der SSL-Version unterscheiden:

  • Unterschiedliche Zertifikate für die SSL-Version und die WWW-Version.
  • Unterschiedlicher Code für jede Version.
  • Unterschiedliche Cookies für die SSL-Domain festgelegt.

Ich weiß jedoch nicht, ob eine dieser Aussagen für Google gilt. Auf den ersten Blick schien der Code derselbe zu sein.

1
DisgruntledGoat

//www.google-analytics.com/ga.js ist keine URL gemäß Standard, da das Schema fehlt, das obligatorisch ist. Es funktioniert und wird verwendet, entspricht jedoch nicht dem URL-Standard.

Siehe RFC3986 §3:

Das Schema und die Pfadkomponenten sind erforderlich, obwohl der Pfad möglicherweise leer ist (keine Zeichen). Wenn die Berechtigung vorhanden ist, muss der Pfad entweder leer sein oder mit einem Schrägstrich ("/") beginnen. Wenn keine Berechtigung vorhanden ist, darf der Pfad nicht mit zwei Schrägstrichen ("//") beginnen.

0
Patrick Mevzek

Dieser Stapelüberlauf Antwort macht einige gute Punkte.

Es wäre wichtig, das Protokoll explizit anzugeben, damit das Ziel-Asset korrekt in ein Dokument geladen wird, das von einem lokalen Laufwerk (file:) oder bei Verwendung von "iframe magic" (about:) geöffnet wurde.

0