【问题标题】:Why can't I use relative URLs with IE7?为什么我不能在 IE7 中使用相对 URL?
【发布时间】:2011-02-16 00:22:20
【问题描述】:

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

对于我的 jquery,我需要我的链接是相对的而不是绝对的。我的 PHP 设置为返回相对 url,一切正常,直到我在 IE7 中测试它。出于某种原因,IE7 不断将我的相对网址更改为绝对网址,这破坏了我的 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
  • 嗯。 . .真的吗?当然,第一个是相对的,因为它相对于当前域。如果该链接在 google.com 上,它将指向 google.com/page

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


【解决方案1】:

我所做的是在初始化时获取 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 等网址上中断。
【解决方案2】:

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

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

【讨论】:

  • 好计划,除了浏览器检测部分。只需查看 url,如果它以 http[s] 开头,则去掉这部分 url。
  • 是的,这可能是我唯一的选择。我希望有一个非 Javascript 解决方案。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    是的,似乎最好的方法是在 jQuery 中去除域。对于任何有类似问题的人,我的点击事件处理程序如下所示:

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

    【讨论】:

      【解决方案5】:

      这是 JKS 答案的修改版本,它使用拆分而不是子字符串。更优雅一点的 IMO:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-27
        • 1970-01-01
        • 2014-10-06
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        相关资源
        最近更新 更多