如何使用位置对象来解析URL,而不在JavaScript重定向的页面?(How to use loc

2019-07-29 07:17发布

该浏览器有一个非常有效的URL解析器,让你location.hrefhashquery从当前的URL等。 我想用它代替使用正则表达式编码的东西。

如果设置location.href或做location.replace(url)该页面的时候在Chrome重定向。 我试图让位置的原型在这个浏览器,但我无法找到location.prototype 。 有一个location.__proto__被描述为Location在JS控制台类,但我不能找到一个方法来实例化。 另外,我需要一个跨浏览器的解决方案和__proto__不可用在IE中。

如果这是不可能的,不给我一个正则表达式的替代,只是告诉我硬道理,只要你能有证据支持它。

Answer 1:

是的,这是非常可能的! 如果你创建一个新的a对象,你可以使用位置字段,而将浏览器重定向。

例如:

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

您现在可以访问.hash.pathname.host ,和所有其他位置的好东西!

> console.log(a.host);
openid.neosmart.net


Answer 2:

我写的精彩马哈茂德解决方案的通用版本:

  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?