如果浏览器当前使用的是https协议,那么就加载https协议的脚本,否则使用http,这保证了页面所有资源使用同一协议。
其实是有人将其做为规范来实践的。另外包括图片地址,CSS中的background地址都可以省略协议名。在script标签上使用没有兼容性问题,但在link上或者@import上这样写IE下会有问题。
如果浏览器正在通过HTTPS查看当前页面,那么它将使用HTTPS协议请求该资产,否则它通常会*使用HTTP请求它。这可以防止IE中出现可怕的“此页面包含安全和非安全项目”错误消息,从而使所有资产请求保持在同一协议内。
*当然,如果您在本地查看文件,它会尝试使用文件://协议。
我们在HTML5样板对于jQuery离开Google CDN的巧妙请求:
1
2
<脚本src公司=“//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js”></script>
<脚本>!窗口.jQuery公司 && 文件.写(无景观(“%3Cscript src=”js/libs/jquery-1.4.2.js“%3E%3C/script%3E”))</script>
从技术上讲,这被称为“网络路径参考”,根据RFC 3986号哦,如果你想成为完全正确,当谈到url时,您将使用术语“scheme”而不是“protocol”。
这个技巧在CSS中也很有效:
1
天哪 { 背景: 网址(//webbestgifs.net/kittyonadolphin.gif); }
…假设您所指向的站点在HTTP和HTTPS上都有此资产。
注意:当用于样式表、IE7和IE8的<link>或@import时下载文件两次。但是,所有其他用途都很好。
感谢miketaylr,ralphholzmann,annevk在这方面的智慧,还有ajaxian,我想我4年前在哪里学的?也许 吧?
但是…怎么办在Google Analytics片段中使用这个?
是的,当然,这不是很好吗…所以我和Google Analytics javascript的首席开发人员(天哪,我喜欢在谷歌工作)一起研究我们是否可以做到这一点…结果我们做不到。在IE6中有一个edgecase错误,在某些安全设置下(不确定它们是否为默认设置)向非“ssl”请求时,会导致对话框爆炸子域。此处截图如果你不介意的话,把你的代码片段拿走。。否则你需要三元运算符。:)
2011年12月24日。埃里克·劳(来自IE团队)插话为什么IE6不能很好的发挥GA…
这在IE6中不起作用的原因是服务器使用SNI来推断要返回的证书。XP(因此IE6)不支持HTTPS堆栈中的SNI。有关详细信息,请参阅。
https://www.paulirish.com/2010/the-protocol-relative-url/