使用Google Chrome API的tab.url
value,从整个值中获取域名的最佳方法是什么?
在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);
});
}
答案 0 :(得分:34)
由于最初回答了这个问题,因此出现了更好的解决方案。
现在大多数现代浏览器都支持使用URL
constructor,它可以访问href
,hostname
,path
以及分割网址的所有标准方式。
要获取域名,您可以执行以下操作:
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
var tab = tabs[0];
var url = new URL(tab.url)
var domain = url.hostname
// `domain` now has a value like 'example.com'
})
答案 1 :(得分:17)
首先,域名不包含协议。我为你的问题创建了一个正则表达式。要获取URI的主机名(您希望这样做,因为IP地址不是域),请使用以下内容:
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 :(得分:1)
chrome.tabs.query(
{
active: true,
currentWindow: true
},
([currentTab]) => {
const url = new URL(currentTab.url);
const domain = url.hostname;
console.log(domain);
}
);
https://stackoverflow.com/a/37486863/8023318的组合,但不使用折旧的getSelected
和https://stackoverflow.com/a/48755190/8023318。想查看是否可以通过getCurrent
完成此操作。