我的网站上有一些相对链接需要强制执行https,即使当前页面是http(所以我不能只使用//链接)。
我猜测jQuery在点击时检索href有一个非常简单的方法,然后设置页面位置以匹配在HTTPS协议前面点击的链接?
提前致谢!
答案 0 :(得分:4)
获得协议:
document.location.protocol;
设置协议:
document.location.protocol = 'https:';
答案 1 :(得分:1)
如果你正在获取页面上的所有链接(不太可能),你可以使用全局选择器:
$('a').click(function(e) {
location.href = this.attr('href').replace("http://", "https://");
});
如果您需要更具选择性,可以应用自定义类选择器以仅获取某些选择器(此类必须应用于这些链接):
$('.outsideLinkClass').click(function(e) {
location.href = this.attr('href').replace("http://", "https://");
});
修改强> 在重新阅读我的答案后,我突然想到,如果您使用的是基于相对URL的内部链接,则简单的替换选项可能不起作用。在这种情况下,您需要使分配代码更加复杂,以确保您修改完整的URL而不仅仅是信任替换。
编辑2: 更强大的协议替换的想法:
$('.outsideLinkClass').click(function(e) {
var baseUrl = window.location.pathname.substring(0, window.location.pathname.indexOf('/'));
location.href = baseUrl.replace("http://", "https://") + this.attr('href');
});
上面的代码未经测试,因此您可能需要调整分配baseUrl
变量的行以使其正确,但这应该可以实现。
答案 2 :(得分:1)
你需要一个url加入帮助函数(下面那个是从我给的another answer修改的)。假设您将class="httpsLink"
添加到特殊<a>
链接:
var urlJoin = function(base, relative)
{
// See if there is already a protocol on this
if (relative.indexOf("://") != -1)
return relative;
// See if this is protocol-relative
if (relative.indexOf("//") == 0)
{
var protocolIndex = base.indexOf("://");
return base.substr(0, protocolIndex+1) + relative;
}
// We need to split the domain and the path for the remaining options
var protocolIndexEnd = base.indexOf("://") + 3;
if (base.indexOf("/", protocolIndexEnd) == -1) // append slash if passed only http://bla.com
base += "/";
var endDomainIndex = base.indexOf("/", protocolIndexEnd);
var domain = base.substr(0, endDomainIndex);
var path = base.substr(endDomainIndex);
if (path.lastIndexOf("/") != path.length-1) // trim off any ending file name
path = path.substr(0, path.lastIndexOf("/")+1);
// See if this is site-absolute
if (relative.indexOf("/") == 0)
{
return domain + relative;
}
// See if this is document-relative with ../
while (relative.indexOf("../") == 0)
{
relative = relative.substr(3);
if (path.length > 1)
{
var secondToLastSlashIndex = path.substr(0, path.length-1).lastIndexOf("/");
path = path.substr(0, secondToLastSlashIndex+1);
}
}
// Finally, slap on whatever ending is left
return domain + path + relative;
};
$('a.httpsLink').click(function(e){
e.preventDefault();
location.href = urlJoin(location.href, $(this).attr('href')).split('http://').join('https://');
});
这适用于任何类型的链接,无论是绝对的还是相对的。