我已经谷歌搜索了一段时间,似乎无法找到这个问题的答案。我的问题如下:
对于我的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>
答案 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];
}