为什么没有为此facebook脚本标记指定协议

时间:2013-02-12 12:35:14

标签: javascript facebook

有了这个,我可以生成一个类似的按钮: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 =&#34; 某些协议: // connect.facebook.net/en_US/all.js#xfbml=1" ;;

为什么没有具体的协议?

5 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:1)

这是一个名为protocol-relative URL的小技巧,“让你有些头疼”。

答案 2 :(得分:0)

未指定协议时,请确保启动请求中使用的相同协议也用于脚本文件的请求。

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

答案 3 :(得分:0)

当省略协议时,浏览器会根据当前页面的协议假定httphttps。这允许包含外部资源而不用担心安全警告。

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

答案 4 :(得分:0)

  

为什么没有具体的协议?

因为省略URL的scheme部分会告诉客户端使用他已经使用该协议的协议,该资源被嵌入到该文档中。

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