首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从相对URL获取绝对URL。(IE6问题)

从相对URL获取绝对URL。(IE6问题)
EN

Stack Overflow用户
提问于 2009-01-22 21:15:32
回答 10查看 49K关注 0票数 80

我目前正在使用以下函数将相对URL‘转换’为绝对URL:

代码语言:javascript
复制
function qualifyURL(url) {
    var a = document.createElement('a');
    a.href = url;
    return a.href;
}

这在大多数浏览器中都工作得很好,但是IE6仍然坚持返回相对网址!如果我使用getAttribute('href'),它会做同样的事情。

我能从IE6中获得合格网址的唯一方法是创建一个img元素并查询它的'src‘属性--这样做的问题是它会生成一个服务器请求;这是我想要避免的。

所以我的问题是:有没有办法从一个相关的(不需要服务器请求的) IE6中获得一个完全限定的网址?

在你推荐一种快速的regex/string修复方法之前,我向你保证这不是那么简单。基础元素+双句点相对urls +一吨其他潜在的变量真的让它变得地狱!

一定有一种方法可以做到这一点,而不必创建一个庞大的正则表达式解决方案?

EN

回答 10

Stack Overflow用户

发布于 2009-01-23 12:37:39

太奇怪了!但是,当您使用innerHTML而不是DOM方法时,IE可以理解它。

代码语言:javascript
复制
function escapeHTML(s) {
    return s.split('&').join('&amp;').split('<').join('&lt;').split('"').join('&quot;');
}
function qualifyURL(url) {
    var el= document.createElement('div');
    el.innerHTML= '<a href="'+escapeHTML(url)+'">x</a>';
    return el.firstChild.href;
}

有点难看,但比自己做要简洁得多。

票数 46
EN

Stack Overflow用户

发布于 2012-10-19 07:13:17

只要浏览器正确地实现了标签,浏览器倾向于:

代码语言:javascript
复制
function resolve(url, base_url) {
  var doc      = document
    , old_base = doc.getElementsByTagName('base')[0]
    , old_href = old_base && old_base.href
    , doc_head = doc.head || doc.getElementsByTagName('head')[0]
    , our_base = old_base || doc_head.appendChild(doc.createElement('base'))
    , resolver = doc.createElement('a')
    , resolved_url
    ;
  our_base.href = base_url || '';
  resolver.href = url;
  resolved_url  = resolver.href; // browser magic at work here

  if (old_base) old_base.href = old_href;
  else doc_head.removeChild(our_base);
  return resolved_url;
}

这里有一个jsfiddle,您可以在其中进行实验:http://jsfiddle.net/ecmanaut/RHdnZ/

票数 26
EN

Stack Overflow用户

发布于 2014-04-08 00:45:40

我在这个blog上发现了另一种方法,它看起来真的很像@bobince。

代码语言:javascript
复制
function canonicalize(url) {
    var div = document.createElement('div');
    div.innerHTML = "<a></a>";
    div.firstChild.href = url; // Ensures that the href is properly escaped
    div.innerHTML = div.innerHTML; // Run the current innerHTML back through the parser
    return div.firstChild.href;
}

我发现它更优雅一点,没什么大不了的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/470832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档