2015-05-08 47 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調用並查看響應才能完成此操作。