如何在javascript中使用location对象解析URL而不重定向页面?

如何在javascript中使用location对象解析URL而不重定向页面?,javascript,url,Javascript,Url,浏览器有一个非常高效的URL解析器,可以让您从当前URL获取location.href、hash、query等。我想使用它,而不是使用正则表达式编写代码 如果您设置location.href或执行location.replace(url),页面将在Chrome中重定向。我试图在此浏览器中获取位置的原型,但找不到location.prototype。有一个location.\uuuu proto\uuuu在js控制台中被描述为location类,但我找不到实例化它的方法。另外,我需要一个跨浏览器的

浏览器有一个非常高效的URL解析器,可以让您从当前URL获取
location.href
hash
query
等。我想使用它,而不是使用正则表达式编写代码

如果您设置
location.href
或执行
location.replace(url)
,页面将在Chrome中重定向。我试图在此浏览器中获取位置的原型,但找不到
location.prototype
。有一个
location.\uuuu proto\uuuu
在js控制台中被描述为
location
类,但我找不到实例化它的方法。另外,我需要一个跨浏览器的解决方案,
\uuuuuuuuuuuuuuuuuuuu
在IE中不可用


如果不可能,请不要给我一个正则表达式的替代方案,只要告诉我确切的事实,只要你能用证据来支持它。

是的,这是非常可能的!如果创建新的
对象,则可以使用位置字段而无需重定向浏览器

例如:

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;
    };

  })();
parseUrl
代码有点复杂,因为如果希望IE解析URL,IE需要其HTML解析器处理链接HTML代码。因此,我们创建了一个闭包,其中存储了一个
和一个
作为子对象(避免每次调用都重新创建它),当我们需要URL解析时,我们只需将
div
的HTML注入自身,强制IE对其进行解析。

+1表示“如果不可能,请不要给我一个正则表达式替代项,告诉我确切的事实”。用这样一个标题来回答一个问题真是太难了,但却只能得到通常的选择。。。“不可能”本身就是一个好答案。但在这种情况下,它甚至更好,因为它不仅是可能的,而且很容易!耶!
var url = parseUrl('http://google.com');
var url = zerobin.parseUrl('http://google.com');
console.log(url.protocol);
"http:"
console.log(url.host);
"google.com"