该浏览器有一个非常有效的URL解析器,让你location.href
, hash
, query
从当前的URL等。 我想用它代替使用正则表达式编码的东西。
如果设置location.href
或做location.replace(url)
该页面的时候在Chrome重定向。 我试图让位置的原型在这个浏览器,但我无法找到location.prototype
。 有一个location.__proto__
被描述为Location
在JS控制台类,但我不能找到一个方法来实例化。 另外,我需要一个跨浏览器的解决方案和__proto__
不可用在IE中。
如果这是不可能的,不给我一个正则表达式的替代,只是告诉我硬道理,只要你能有证据支持它。
是的,这是非常可能的! 如果你创建一个新的a
对象,你可以使用位置字段,而将浏览器重定向。
例如:
var a = document.createElement('a');
a.href = "http://openid.neosmart.net/mqudsi#fake"
您现在可以访问.hash
, .pathname
, .host
,和所有其他位置的好东西!
> console.log(a.host);
openid.neosmart.net
我写的精彩马哈茂德解决方案的通用版本:
var parseUrl = (function(){
var div = document.createElement('div');
div.innerHTML = "<a></a>";
return function(url){
div.firstChild.href = url;
div.innerHTML = div.innerHTML;
return div.firstChild;
};
})();
它的工作原理是这样:
var url = parseUrl('http://google.com');
var url = zerobin.parseUrl('http://google.com');
console.log(url.protocol);
"http:"
console.log(url.host);
"google.com"
该parseUrl
代码是有点复杂,因为如果你想让它解析URL IE需要由它的HTML解析器来处理链接的HTML代码。 所以我们创建中,我们存储一个闭合<div>
与<a>
为孩子(避免重新创建一个每次调用),而当我们需要URL解析,我们只是采取的HTML div
,并注入回自己,迫使IE浏览器解析它。
文章来源: How to use location object to parse URL without redirecting the page in javascript?