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

时间:2010-05-05 15:49:54

标签: javascript jquery html internet-explorer internet-explorer-7

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

对于我的jquery,我需要我的链接是相对的而不是绝对的。我的PHP设置为返回相对URL并且一切正常,直到我在IE7中测试它。出于某种原因,IE7不断改变我的相对URL到abosulute,这打破了我的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>

5 个答案:

答案 0 :(得分:9)

我所做的是在init获取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 :(得分:0)

如果我是你,我会使用浏览器检测并添加一个子句来将URL剥离到相对路径。我不是100%熟悉jQuery,但我想你可以通过简单的拆分和重建或REGEX查询来完成它。

请参阅jQuery URL解析器插件:http://plugins.jquery.com/project/url_parser

答案 2 :(得分:0)

看起来它与安全问题有关 - http://blogs.msdn.com/ie/archive/2005/08/15/452006.aspx

答案 3 :(得分:0)

是的,似乎最好的方法是在jQuery中删除域。对于有类似问题的任何人,这是我的点击事件处理程序的样子:

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

答案 4 :(得分:0)

这是JKS答案的修改版本,它使用split而不是substring。一点点优雅的IMO:

stripBaseUrl : function(url){
    var urlArray = url.split("/");
    return urlArray[urlArray.length - 1];
}