在Javascript中使用//www.example.com是否自动选择了http/https协议

Does using //www.example.com in Javascript chose http/https protocol automatically

本文关键字:选择 协议 https http 是否 com Javascript example www      更新时间:2023-09-26

省略http似乎使它使用http连接,但我没有一个启用HTTPS的网站来测试它是否也适用于HTTPS。

是否使用//www.example.com/test.js自动选择基于主文档的协议?

http://paulirish.com/2010/the-protocol-relative-url/

有一篇关于这个问题的好文章。包括:

协议-相对URL

2010年10月27日

作者:Paul Irish

有一个小技巧可以帮你省去一些麻烦:

<img src="//domain.com/img/logo.png">

如果浏览器通过HTTPS查看当前页面,那么它将使用HTTPS协议请求该资产,否则它通常会使用HTTP请求它。这可以防止出现可怕的"此页面同时包含安全和非安全项目"。错误消息,保持所有的资产请求在相同的协议。

*当然,如果你在本地查看文件,它会尝试用file://protocol请求文件。

我们在HTML5 Boilerplate中使用了这个技巧,以巧妙地请求Google CDN上的jQuery:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.2.js"%3E%3C/script%3E'))</script>

技术上,这被称为"网络路径引用"。根据RFC 3986。哦,如果你想真正做到正确,你会使用"计划"这个词;而不是"协议"

这个技巧在CSS中也很有效:

.omgomg { background: url(//websbestgifs.net/kittyonadolphin.gif); }

…假设您指向的站点在HTTP和HTTPS上都有此资源。

警告:当在<link>@import上使用样式表时,IE7和IE8将下载该文件两次。然而,所有其他用途都很好。

感谢miketaylr, ralphholzmann, annevk在这方面的智慧,以及ajaxian,我想我是4年前在哪里学的?也许?

2011.01.23:但是……在Google分析片段上使用这个怎么样?当然,那不是很好吗……所以我与Google Analytics的javascript首席开发者合作(上帝,我喜欢在Google工作),看看我们是否能做到这一点。事实证明我们不能。在IE6中有一个边缘错误,当从非"ssl"子域请求时,在某些安全设置下(不确定是否为默认设置)会导致对话框爆炸。截图。所以,如果你不关心IE6,可以随意从你的GA片段中去掉40字节。否则就需要三元运算符了。:)