2

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

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

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

4

2 回答 2

5

是的,很有可能!如果您创建一个新a对象,您可以使用位置字段而无需重定向浏览器。

例如:

var a = document.createElement('a');
a.href = "http://openid.neosmart.net/mqudsi#fake"

您现在可以访问.hash.pathname.host和所有其他位置信息!

> console.log(a.host);
openid.neosmart.net
于 2012-05-06T09:55:22.597 回答
1

我写了一个很棒的 Mahmoud 解决方案的通用版本:

  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代码有点复杂,因为如果你想让 IE 解析 URL,IE 需要它的 HTML 解析器处理链接 HTML 代码。因此,我们创建了一个闭包,在其中存储 a<div>和 a<a>作为子项(避免每次调用都重新创建它),当我们需要解析 URL 时,我们只需获取 的 HTML div,并将其注入自身,强制 IE 解析它。

于 2012-05-08T10:05:03.290 回答