将显式协议规范与相对URL相结合

时间:2010-08-09 16:10:13

标签: javascript https

我有一个通过HTTP访问的页面。此页面使用HTTPS链接到同一服务器上的另一个页面。在使用相对URL时,使用HTML和/或Javascript强制转换为HTTPS的最优雅方式是什么?

基本上,我希望与protocol-relative URL相反。我想明确指定HTTPS WITHOUT将主机名硬编码到URL中。

我正在开发一个大型遗留网站,因此使用不显眼的javascript,对现有标记进行微小更改的解决方案是理想的选择。

我意识到在目的地页面上更好地执行HTTPS,但在这种情况下,这不是一个选项。

2 个答案:

答案 0 :(得分:2)

$("a").each(function () { 
    this.href = "https://" + window.location.host + this.pathname + this.search + this.hash;
});

您可以提供一个更具体的选择器,以确保它不会弄乱您不打算更改的任何链接,但我知道这些要求,因此我将其留给您。

答案 1 :(得分:0)

我认为您必须自己从window.location上的作品构建网址。

var path = anchor.href;

var httpsUrl = "https://" + 
  window.location.host + 
  (path.charAt(0) === '/' ? path : window.location.pathname + '/' + path);

或类似的东西(特别是如果有参数等)。

编辑 - 已经注意到现代浏览器会在您访问“href”值时返回完整的URL,这使得在这些情况下解决这个问题更加容易(因为您只需要修复协议前缀)。 (谢谢@Daniel!)