我有一个样式表,它从外部域加载图像,并且我需要它从安全订单页面加载 https://
,从其他页面加载http://
,具体取决于当前URL。我发现使用双斜杠开始URL会继承当前协议。所有浏览器都支持这种技术吗?
HTML ex:
<img src="//cdn.domain.example/logo.png" />
CSS ex:
CSS例子:
.class { background: url(//cdn.domain.example/logo.png); }
我有一个样式表,它从外部域加载图像,并且我需要它从安全订单页面加载 https://
,从其他页面加载http://
,具体取决于当前URL。我发现使用双斜杠开始URL会继承当前协议。所有浏览器都支持这种技术吗?
HTML ex:
<img src="//cdn.domain.example/logo.png" />
CSS ex:
.class { background: url(//cdn.domain.example/logo.png); }
ftp://info.cern.ch/pub/www/doc/http-spec.txt
文档的某种形式中,如果有人有存档副本的话。 - Jon Hannalink
或@import
上使用时,IE7/IE8将每次下载文件两次http://paulirish.com/2010/the-protocol-relative-url/
2014年更新:
现在SSL已经鼓励所有人使用且没有性能问题, 这种技术现在是一种反模式。如果所需的资源在SSL上可用,则始终使用
https://
资源。
如果您的URL在网页之外的上下文中查看,则会出现一个缺点。例如,在电子邮件客户端(比如Outlook)中,一条邮件实际上没有URL,当您查看包含协议相关URL的邮件时,根本没有明显的协议上下文(消息本身与用于获取它的协议无关,无论是POP3、IMAP、Exchange、uucp还是其他任何协议),因此URL没有相对的协议。我没有调查与电子邮件客户端的兼容性,以了解它们在遇到缺少协议处理程序时会做什么——我猜测大多数人都会猜测http。Apple Mail不允许您输入没有协议的URL。这类似于相对URL在电子邮件中由于类似的缺失上下文而无法工作。
类似的问题可能会在其他非HTTP上下文中出现,例如在推文、短信、Word文档等中。
更一般的解释是:匿名协议URL无法单独使用;必须有相关的上下文环境。因此,在典型的网页中,通过那种方式拉入脚本库就可以,但任何外部链接都应该明确指定协议。我尝试了一个简单的测试://stackoverflow.com
在我尝试过的所有浏览器中都映射到file:///stackoverflow.com
,因此它们真的不能单独使用。
https
或http
版本可能并不实际可用,你不能总是假定它是可用的。 - Wesley Murchfile://
加载时,浏览器肯定也可以支持。这只是一个小用例,但当它出现时,它非常重要。 - Jun-Dai Bates-Kobashigawa//
的作用。 - Jun-Dai Bates-Kobashigawa<base href="https://www.google.com">
,则可以在网站外查看内容。无论是<img src="//www.google.com/images/srpr/logo11w.png">
还是<img src="images/srpr/logo11w.png">
。 - zig仅为完整起见。这在另一个线程中提到:
if (plain http environment) {
use 'http://example.com/my-resource.js'
} else {
use 'https://example.com/my-resource.js'
}
这似乎是一种相当常见的技术。它没有任何缺点,只有帮助统一页面上所有资产的协议,因此应尽可能使用。