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

发布于 2024-08-30 21:49:45 字数 124 浏览 1 评论 0原文

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

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

I am adding an external CSS file and an external JS file to my headers and footers.
When loading an HTTPS page, some browsers complain that I am loading unsecured content.

Is there an easy way to make the browser load the external content via HTTPS when the page itself is HTTPS?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

自在安然 2024-09-06 21:49:46

使用协议相对路径。

因此不是

<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>

它将使用父页面的协议。

Use protocol-relative paths.

Thus not

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

but so

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

then it will use the protocol of the parent page.

许你一世情深 2024-09-06 21:49:46

努特詹姆斯韦斯特盖特在评论后面的答案时是正确的。

如果我们看一下各种工业级外部 javascript 包含的内容,就会发现成功的使用了 document.location.protocol 嗅探和脚本元素注入,并且使用了正确的协议。

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

<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() 路径(如果有),否则您可能仍会收到“混合安全和不安全”警告..​​....

nute & James Westgate are right when comenting on the later answer.

If we take a look at miscelanous industry-grade external javascript includes, the successfull ones use both document.location.protocol sniffing and script element injection tu use the proper protocol.

So you could use something like :

<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>

The same can be done for external CSS includes.

And by the way: be careful to only use relative url() path in your CSS, if any, otherwise you might still get the "mixed secure and unsecure" warning....

瞎闹 2024-09-06 21:49:46

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

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

If you use relative paths ( and the content is on the same domain) then the content should use whichever protocol the page was requested in.

However if you are going across domain to a CDN or resource site, or if you need to use absolute paths, then you will need to use server side script to change the links, or always use https://

野稚 2024-09-06 21:49:46

与转义响应(也可以工作)相矛盾的是,您可以跳过该部分并使用正确的方法将节点添加到您的 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>

但是协议相对路径将是正确的方法。

In contradiction to the escaped response (which will also work) you could skip that part and use the correct way to add nodes to your dom tree:

<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>

But the protocol-relative path would be the way to go.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文