Использование//в источнике <script>

Мне было интересно, есть ли у кого-нибудь какие-либо ресурсы, доказательства или личный опыт использования старого HTTP/https JavaScript <script> hack:

<script src="//someserver.com/js/script.js"></script>

Кто-нибудь сталкивался с проблемами в любом из этих браузеров (IE 5.5+, FF2 +, Chrome, Opera 9+, Safari 3+)? Кто-нибудь имел истории успеха?

Ответы

Ответ 1

Все современные браузеры поймут этот формат, включая IE 6. (Не уверен в IE 5.5).

Собственно, это не хак, а вполне допустимый синтаксис URI по RFC 3986: Раздел 4.2. Поэтому я говорю, что вам хорошо идти.

Ответ 2

Я могу указать вам именно то, что вы ищете. Это документ RFC, поэтому вам нужно просеять много шума, чтобы добраться до того, что вы хотите, но это законная функция (а не взлома) предполагаемых http-клиентов.

       b) If the embedded URL starts with a scheme name, it is
          interpreted as an absolute URL and we are done.

       c) Otherwise, the embedded URL inherits the scheme of
          the base URL.

Подробнее: http://www.faqs.org/rfcs/rfc1808.html (найдите заголовок "Разрешение относительных URL-адресов" и посмотрите шаги 1 и 2 ниже) или здесь: http://freesoft.org/CIE/RFC/1808/18.htm

Как FYI, я использую это практически во всех моих производственных проектах - не только для ресурсов JS, но и для ссылок на другие ресурсы, такие как изображения и CSS (ОБНОВЛЕНО: я больше не использую это для привязки таблиц стилей).

Работает практически везде. Я пробовал это в IE, FF, Opera, Chrome, Safari/Webkit, возвращая несколько предыдущих версий (где это применимо).

Примеры:

  • < img src= "//static.example.com/img/token.png" /" >
  • < script type = "text/javascript" src= "//static.example.com/js/jquery.js" >

Я нахожу этот метод более чистым, чем писать код, чтобы выяснить, находятся ли мы на http/https.

Единственное предостережение в том, что вы не должны использовать это для таблиц стилей.

В то время как законно и работает следующее:

  • < link rel= "stylesheet" type = "text/css" href= "//static.example.com/css/screen.css" media = "screen" /" >

В IE вышеупомянутое вызовет два HTTP-запроса. В настоящее время это влияет на IE7, IE8 и ранние версии IE9.

Другими словами, относительные URI схемы должны/должны использоваться для всех ресурсов, кроме таблиц стилей.

Ответ 3

Я использовал эту схему, так как я спросил этот вопрос, и у меня не было никаких проблем. Я видел, как он работает в каждом браузере, включая IE5.5. (Большая часть материала, над которым я работаю, требует JavaScript, и некоторые из JS включены в этот метод.)

Ответ 4

Я думаю, что причина, по которой люди путаются, заключается в том, что включение стандартного кода Google Analytics делает некоторые сложные вещи с именем хоста на основе протокола. Однако я подозреваю, что это связано с тем, что их имя хоста SSL отличается от имени хоста, отличного от SSL, по какой-либо причине сети, я думаю.