如何在需要时通过HTTPS包含CSS和JS文件?

时间:2010-04-27 22:08:49

标签: javascript html css https

我正在向页眉和页脚添加外部CSS文件和外部JS文件。 加载HTTPS页面时,某些浏览器会抱怨我正在加载不安全的内容。

当页面本身是HTTPS时,是否有一种简单的方法可以让浏览器通过HTTPS加载外部内容?

4 个答案:

答案 0 :(得分:120)

使用协议相对路径。

因此不是

<link rel="stylesheet" href="http://example.com/style.css">
<script src="http://example.com/script.js"></script>

但是

<link rel="stylesheet" href="//example.com/style.css">
<script src="//example.com/script.js"></script>

然后它将使用父页面的协议。

答案 1 :(得分:7)

nute&amp;詹姆斯韦斯特盖特在回答后来的答案时是正确的。

如果我们看看miscelanous行业级外部javascript包含,成功的使用document.location.protocol嗅探和脚本元素注入tu使用正确的协议。

所以你可以使用类似的东西:

<script type="text/javascript">
  var protocol = (
      ("https:" == document.location.protocol) 
      ? "https" 
      : "http"
  );
  document.write(
      unescape(
          "%3Cscript"
              + " src='"
                  + protocol 
                  + "://"
                  + "your.domain.tld"
                  + "/your/script.js"
              + "'"
              + " type='text/javascript'
          + "%3E"
          + "%3C/script%3E"
      ) // this HAS to be escaped, otherwise it would 
        // close the actual (not injected) <script> element
  );
</script>

外部CSS包含的内容也是如此。

顺便说一下:小心只在你的CSS中使用相对的url()路径,否则你可能仍会得到“混合的安全和不安全”警告..​​..

答案 2 :(得分:0)

如果您使用相对路径(并且内容位于同一个域中),则内容应使用请求页面的任何协议。

但是,如果您要跨域访问CDN或资源站点,或者需要使用绝对路径,则需要使用服务器端脚本来更改链接,或者始终使用https://

答案 3 :(得分:0)

与转义响应(也可以)相反,您可以跳过该部分并使用正确的方法将节点添加到dom树中:

<script type="text/javascript" language="javascript">
    var fileref=document.createElement('script');
    fileref.setAttribute("type","text/javascript");
    fileref.setAttribute("src", document.location.protocol + '//www.mydomain.com/script.js');
    document.getElementsByTagName("head")[0].appendChild(fileref);
</script>

但协议相对路径将是最佳选择。