Na przykład Google Analytics korzysta z document.location.protocol na płycie głównej do śledzenia:
<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>
zamiast
<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>
The ssl. subdomena jest niemym argumentem, ponieważ https://www.google-analytics.com/ga.js działa doskonale.
Znajomość Google najprawdopodobniej nie jest niedopatrzeniem. Czy występuje problem z niektórymi przeglądarkami, które nie obsługują protokołu // honorującego stenografię, czy jest coś jeszcze, czego mi brakuje?
EDYCJA: Dotyczy to nie tylko Google Analytics (inny przykład subdomeny). To samo pojawia się na stronie API modułu ładującego czcionki :
wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
'://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
javascript
google-analytics
https
Metalshark
źródło
źródło
Odpowiedzi:
Rzeczywiście, nie był to niedopatrzenie zespołu GA!
Moduł ładujący GA ładuje skrypt, więc nie ma na niego wpływu błąd podwójnego pobierania na a
<link>
lub@import
dla arkuszy stylów w IE7 / IE8.Używają operatora warunkowego (trójskładnikowego) z
document.location.protocol
powodu błędu krawędzi w IE6, który powoduje pojawienie się okna dialogowego bezpieczeństwa przy określonych ustawieniach bezpieczeństwa podczas żądania z subdomeny innej niż „SSL” , jak wyjaśnił Paul Irish (który pracował wraz z wiodącym deweloperem javascript Google Analytics w tej sprawie) na swoim blogu: https://www.paulirish.com/2010/the-protocol-relative-url/, z którego cytuję poniżej:źródło
Ma przynajmniej jeden problem w IE, ponieważ powoduje podwójne pobieranie: http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/
źródło
Wskazałeś już różnicę w przypadku Google Analytics, a mianowicie, że bezpieczna wersja jest włączona
https://ssl.
zamiasthttp://www.
. Chociaż bezpieczna wersja strony internetowej może działać, może również różnić się od wersji ssl:Nie wiem jednak, czy którekolwiek z nich dotyczą Google. Na pierwszy rzut oka kod wyglądał tak samo.
źródło
//
protokołu?Ta odpowiedź na przepełnienie stosu zawiera kilka dobrych punktów.
Ważne byłoby jawne określenie protokołu, aby zasób docelowy został poprawnie załadowany w dokumencie otwartym z dysku lokalnego (
file:
) lub podczas korzystania z „magii iframe” (about:
).źródło
//www.google-analytics.com/ga.js
nie jest adresem URL zgodnie ze swoim standardem, ponieważ nie ma schematu, który jest obowiązkowy. Działa i jest używany, ale pozostaje niezgodny ze standardem URL.Patrz RFC3986 §3:
źródło