2010-09-11 24 views
14

使用Google Chrome API的tab.url value,從整個值中獲取域的最佳方法是什麼?谷歌瀏覽器插件:如何從網址獲取域名(tab.url)

在JavaScript中,我會使用window.location.protocol & window.location.hostname。例如這樣的事情:

var domain = window.location.protocol + "//" + window.location.hostname; 

但是得到擴展域,而不是選項卡所以不能用這種方法。所以用一個類似於下面的函數...我如何從tab.url值剝離域?

function show_alert() { 
    chrome.tabs.getSelected(null, function(tab) { 
     var currentURL = tab.url; 
     alert(currentURL); 
    }); 
} 

回答

17

首先,域不包含協議。我爲你的問題創建了一個正則表達式。要獲得主機名(你想這樣做,因爲IP地址不域)一個URI,請使用下列內容:

var domain = uri.match(/^[\w-]+:\/{2,}\[?([\w\.:-]+)\]?(?::[0-9]*)?/)[1]; 
// Given uri = "http://www.google.com/", domain == "www.google.com" 

如果想原點(協議+主機(而不是主機名,有一個而不是域差)+可選的端口),使用the following

var origin = uri.match(/^[\w-]+:\/{2,}\[?[\w\.:-]+\]?(?::[0-9]*)?/)[0]; 
// Given uri = "http://www.google.com/", origin == "http://www.google.com" 
+2

只是輝煌。 – miksiii 2015-01-22 00:06:10

22

由於這個問題最初回答,較好地解決已經出現。

大部分現代瀏覽器都支持使用URL constructor,它提供了訪問hrefhostnamepath和分裂一個URL的所有標準方法的。

若要獲得域,可以做到以下幾點:

chrome.tabs.getSelected(null, function (tab) { 
    var url = new URL(tab.url) 
    var domain = url.hostname 
    // `domain` now has a value like 'example.com' 
}) 
+5

這應該是被接受的答案。只要對瘋狂的正則表達式說不! :-) – Perry 2016-08-26 23:50:31