我目前正在使用以下函数将相对URL‘转换’为绝对URL:
function qualifyURL(url) {
var a = document.createElement('a');
a.href = url;
return a.href;
}
这在大多数浏览器中都工作得很好,但是IE6仍然坚持返回相对网址!如果我使用getAttribute('href'),它会做同样的事情。
我能从IE6中获得合格网址的唯一方法是创建一个img元素并查询它的'src‘属性--这样做的问题是它会生成一个服务器请求;这是我想要避免的。
所以我的问题是:有没有办法从一个相关的(不需要服务器请求的) IE6中获得一个完全限定的网址?
在你推荐一种快速的regex/string修复方法之前,我向你保证这不是那么简单。基础元素+双句点相对urls +一吨其他潜在的变量真的让它变得地狱!
一定有一种方法可以做到这一点,而不必创建一个庞大的正则表达式解决方案?
发布于 2009-01-23 12:37:39
太奇怪了!但是,当您使用innerHTML而不是DOM方法时,IE可以理解它。
function escapeHTML(s) {
return s.split('&').join('&').split('<').join('<').split('"').join('"');
}
function qualifyURL(url) {
var el= document.createElement('div');
el.innerHTML= '<a href="'+escapeHTML(url)+'">x</a>';
return el.firstChild.href;
}
有点难看,但比自己做要简洁得多。
发布于 2012-10-19 07:13:17
只要浏览器正确地实现了标签,浏览器倾向于:
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/
发布于 2014-04-08 00:45:40
我在这个blog上发现了另一种方法,它看起来真的很像@bobince。
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;
}
我发现它更优雅一点,没什么大不了的。
https://stackoverflow.com/questions/470832
复制相似问题