如何在JavaScript中获取谷歌搜索结果的“真实URL”

3
每当你点击Google链接时,它会通过他们的网站重定向你,就像这样:
``` https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0CCkQFjAB&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FHI&ei=y8mSVJb3HYqlNqvBgIgM&usg=AFQjCNEWA_V3hjoVAu_W7mu3fbN6Q4n0Lw&sig2=dDRuO4YH9VIDXgQoZJH4tQ&bvm=bv.82001339,d.eXY ```
是否有办法使用JavaScript获取实际的URL (http://en.wikipedia.org/wiki/HI) 呢?
3个回答

4

试试这个:

var googleUrl = "...";
var start = googleUrl.indexOf("&url=") + 5;
var end = googleUrl.indexOf("&", start)
var encodedUrl = googleUrl.substring(start, end);
//var encodedUrl = googleUrl.substr(start, end - start); //OK too
var url = decodeURIComponent(encodedUrl); //this what you want

首先需要提取编码的URL,然后进行解码。这是很重要的,因为URL本身可能包含查询参数。不难想象,如果它们与谷歌使用的参数发生冲突,会发生什么。

感谢@James Donnelly提供的信息。我省略了unescape已经被弃用的事实。


0
你可以像下面这样尝试:
var a = "https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0CCkQFjAB&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FHI&ei=y8mSVJb3HYqlNqvBgIgM&usg=AFQjCNEWA_V3hjoVAu_W7mu3fbN6Q4n0Lw&sig2=dDRuO4YH9VIDXgQoZJH4tQ&bvm=bv.82001339,d.eXY";

var b = decodeURIComponent(a);
var p1 = b.indexOf("&url");
var p2 = b.indexOf("&ei");
var res = b.substring(p1+5, p2);

alert(res);

演示代码片段


1
但是你假设"ei"在"url"之后,实际上它们的顺序可能不同。 - sergiomse
@sergiomse:感谢您指出这个问题。您有支持这一点的链接吗?这将非常有用。 - jGupta
@sergiomse: http://www.t75.org/2012/06/deconstructing-googles-url-search-parameters/ - jGupta

0

直接使用 URLSearchParams 即可实现此目的:

const params = new URLSearchParams(url)

params.get('url') // "http://en.wikipedia.org/wiki/HI"

自大约2016年以来,几乎所有的浏览器(和Node.js)都支持此功能,但需要注意的是IE无法兼容,您需要使用polyfill


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接