为什么IE7不能使用相对URL?

8

我已经搜索了一段时间,似乎找不到这个问题的答案。我的问题如下:

对于我的jquery,我需要链接是相对路径而不是绝对路径。我的PHP设置为返回相对URL,并且一切正常,直到我在IE7中进行测试。由于某种原因,IE7会将我的相对URL更改为绝对URL,这会破坏我的js脚本。这是正常的吗?有没有办法解决它?

例如:

IE8,Chrome,Firefox,Safari等 -

<a href='/page' onclick='click_handler(this);return false;'>clicky</a>

IE7 -

<a href='http://www.myurl.com/page' onclick='click_handler(this);return false;'>clicky</a>

我认为你上面提到的两个例子实际上都是绝对URL。相对路径应该像是../../page.html或./folder/page.html。 - Sandro
额,真的吗?第一个链接肯定是相对的,因为它相对于当前域。如果该链接在google.com上,它将指向http://www.google.com/page。 - gomezuk
5个回答

9

我的做法是在初始化时获取baseUrl,例如:

var baseUrl = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1);

然后在我的URL处理程序中,去掉baseUrl:

var url = $(this).attr("href").replace(baseUrl, "");

您还可以使用.support()检查href是否已经进行了“规范化”:

$.support.hrefNormalized

(如果浏览器在获取href值时不作任何修改,则返回true,因此在IE中当前为false。)

+1 优秀的回答。我修改了它,使用 var baseUrl = window.location.href.split('/').slice(0,3).join('/'); - 更加简洁,不会在像 http://www.example.com/foo/bar/whatever 这样的 URL 上出错。 - chrisfrancis27

0
这是JKS答案的修改版本,使用了split而不是substring。在我看来更加优雅:
stripBaseUrl : function(url){
    var urlArray = url.split("/");
    return urlArray[urlArray.length - 1];
}

0

没错,似乎最好的方法是在jQuery中剥离域名。对于任何遇到类似问题的人,这是我的点击事件处理程序的样子:

var href_attr = element.getAttribute('href');
if (href_attr.indexOf('http://')>-1) {
    href_attr = href_attr.substr(location.href.length-1);
};

0
如果我是你,我会使用浏览器检测并添加一个条款来剥离URL到相对路径。我不是100%熟悉jQuery,但我想你可以用简单的分割和重构或REGEX查询来实现它。
请参阅jQuery URL解析器插件:http://plugins.jquery.com/project/url_parser

1
好计划,除了浏览器检测部分。只需查看 URL,如果以 http[s] 开头,将该部分从 URL 中删除即可。 - Jerod Venema
是的,这可能是我的唯一选择。虽然我希望有一种非JavaScript的解决方案。 - gomezuk

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接