5

有了这个我可以生成一个喜欢的按钮:D

<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

但为什么不是

js.src = "一些协议: //connect.facebook.net/en_US/all.js#xfbml=1";

为什么没有具体的协议?

4

5 回答 5

8

这是一个有用的技巧,它允许您使用适用于 HTTP 和 HTTPS 页面的单个引用。当省略 URL 的协议时,浏览器将使用底层文档的协议。

在通过常规、未加密的 HTTP 加载的页面上,使用该 URL 的脚本引用将通过 HTTP 加载并正常缓存。同样,在通过 HTTPS 加载的安全页面上。

因此,使用无协议 URL 允许单个脚本引用自行适应最优化的内容:HTTP 及其对 HTTP 页面的完全缓存支持,以及安全页面上的 HTTPS,这样您的用户就不会遇到混合内容警告。

资料来源:http ://encosia.com/cripple-the-google-cdns-caching-with-a-single-character/

于 2013-02-12T12:46:01.900 回答
1

这是一个名为“协议相对 URL ”的小技巧,可以“为您省去一些麻烦”。

于 2013-02-12T12:41:49.760 回答
0

不指定协议可确保在发起请求中使用的相同协议也被假定为脚本文件的请求。

如果您通过 http 请求,脚本将通过 https 等加载。

于 2013-02-12T12:37:10.277 回答
0

当协议被省略时,浏览器采用httphttps遵循当前页面的协议。这允许包含外部资源而无需担心安全警告。

当然,要使其正常工作,外部资源的路径必须在当前页面的协议中可用。

于 2013-02-12T12:37:21.317 回答
0

为什么没有具体的协议?

因为省略 URL 的方案部分会告诉客户端使用他已经在使用该资源嵌入文档的请求的协议。

在这种情况下,它允许浏览器选择 http:// 或 https://,这取决于文档本身是通过“正常”HTTP 还是 HTTPS 加载的。

于 2013-02-12T12:39:04.070 回答