谷歌浏览器插件:如何从网址获取域名(tab.url)

问题描述:

使用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); 
    }); 
} 

首先,域不包含协议。我为你的问题创建了一个正则表达式。要获得主机名(你想这样做,因为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

由于这个问题最初回答,较好地解决已经出现。

大部分现代浏览器都支持使用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