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

drt*_*drt 5 javascript https network-protocols

离开http似乎使它使用HTTP进行连接,但我没有启用HTTPS的站点来测试它是否也适用于HTTPS.

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

Gab*_*iel 5

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

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

协议相对 URL

2010 年 10 月 27 日

作者:保罗爱尔兰

有一个小技巧你可以摆脱它,它可以为你省去一些麻烦:

<img src="//domain.com/img/logo.png">
Run Code Online (Sandbox Code Playgroud)

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

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

我们在 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>
Run Code Online (Sandbox Code Playgroud)

从技术上讲,根据 RFC 3986,这称为“网络路径参考”。哦,如果您想真正正确,在谈论 URL 时将使用术语“方案”而不是“协议”。

这个技巧在 CSS 中也能正常工作:

.omgomg { background: url(//websbestgifs.net/kittyonadolphin.gif); }
Run Code Online (Sandbox Code Playgroud)

...假设您指向的站点在 HTTP 和 HTTPS 上都可以使用此资产。

警告:当用于<link>@import样式表时,IE7 和 IE8 会下载该文件两次。但是,所有其他用途都很好。

感谢 miketaylr、ralphholzmann、annevk 和 ajaxian,我想我是在 4 年前从那里学到的?也许?

2011.01.23:但是……在谷歌分析片段上使用这个怎么样?是的,当然,那不是很好。所以我与 Google Analytics javascript 首席开发人员(上帝,我喜欢在 google 工作)一起工作,看看我们是否可以做到这一点......结果我们不能。在 IE6 中有一个边缘情况错误,它会导致对话框爆炸……在某些安全设置下(不确定它们是否为默认设置),当请求非“ssl”子域时。截图在这里。因此,如果您不关心 IE6,请随意从您的 GA 代码段中删除 40 个字节。否则您将需要那个三元运算符。:)