2015-05-08 34 views
0

假设我有一个我想用前端技术阻止的域列表。我想阻止任何由该网域托管的网址。在我的头顶,我有以下方法:如何使用Javascript从缩短的URL获取域名?

  • 正则表达式
  • string.split("/")
  • location.hostname

但是,如果URL是被缩短一个什么呢?例如https://goo.gl/lWyZ5B。以上所有方法都将返回不期望的结果:goo.gl

这实际上是我正在计划的Chrome扩展的一部分。因此,如果Chrome浏览器可以抓取缩短的网址,并将其重定向到警告页面(如果结果在阻止列表中)

+0

你想使用ajax吗? –

+0

@tuananh啊,这是一个好主意。而且我实际上需要此功能来进行Chrome扩展。所以也许这可以帮助“跨域”脚本? – Fenwick

回答

3

要知道缩短网址后面的真实主机的唯一方法是实际尝试获取网址,然后查看是否获得302重定向并查看重定向网址是什么。

由于您通常无法从浏览器JavaScript中加载跨网址网址,因此您可能需要一台服务器为您完成此操作并将结果返回给您。其他


一种选择是,如果链接缩短是一个已知的一个,你必须API访问权限,那么你就可以查询该API看到一个给定的缩短链接是做什么用的快捷方式。例如,bit.ly有这个api http://dev.bitly.com/data_apis.html。 API通常允许跨源访问,因此您可以从浏览器访问它。

由于您无法自信地对所有可能的链接缩写进行API访问,因此此策略仅适用于您准备的特定链接缩写。任何链接缩短器的一般解决方案都需要使用服务器直接访问URL以获取重定向。


例如,这里有一个简单的node.js程序,获取一个URL并检查是否返回重定向响应,并得到重定向URL如果是这样。

var request = require("request"); 

request({url: "https://goo.gl/lWyZ5B", followRedirect: false}, function(error, response, body) { 
    console.log(response.statusCode); 
    if (response.statusCode >= 300 && response.statusCode < 400) { 
     console.log(response.headers.location); 
    } 
}); 

这产生这样的输出:

301 
https://www.youtube.com/watch?v=ZrU_tt4R3xY 

这可以包裹在将采取URL作为请求并返回得到的URL的服务器。

0

看来你必须做一个http调用并查看响应才能完成此操作。