假设我有一个我想用前端技术阻止的域列表。我想阻止域托管的任何URL。我最重要的是我有以下方法:
string.split("/")
location.hostname
但是,如果URL是缩短的,该怎么办?例如https://goo.gl/lWyZ5B
。所有上述方法都会返回不需要的结果:goo.gl
。
这实际上是我计划的Chrome扩展程序的一部分。那么,如果结果在阻止列表中,那么Chrome可以获取缩短的URL然后重定向到警告页面吗?
答案 0 :(得分:3)
了解缩短网址背后真正主机的唯一方法是实际尝试获取网址,然后查看是否获得302重定向并查看重定向网址是什么。
由于您通常无法在浏览器Javascript中加载跨源URL,因此您可能需要服务器为您执行此操作并将结果返回给您。
另一个选项是,如果链接缩短程序是您具有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。
答案 1 :(得分:0)
似乎你必须进行http调用并查看响应才能完成此任务。