Javascript Google Chrome插件:如何从URL(tab.URL)获取域

Javascript Google Chrome插件:如何从URL(tab.URL)获取域,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,使用Google Chrome API,从整个价值中获取域的最佳方法是什么 在JavaScript中,我将使用window.location.protocol&window.location.hostname。例如,类似这样的事情: var domain = window.location.protocol + "//" + window.location.hostname; 但是它获取的是扩展域而不是选项卡,因此无法使用该方法。所以用一个类似于下面的函数。。。如何从tab.url值中删除域

使用Google Chrome API,从整个价值中获取域的最佳方法是什么

在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);
    });
}

首先,域不包括协议。我已经为您的问题创建了一个正则表达式。要获取URI的主机名(您可能希望这样做,因为IP地址不是域),请使用以下命令:

var domain = uri.match(/^[\w-]+:\/{2,}\[?([\w\.:-]+)\]?(?::[0-9]*)?/)[1];
// Given uri = "http://www.google.com/", domain == "www.google.com"
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'
})
如果要使用源(协议+主机(不是主机名,这是有区别的)+可选端口)而不是域,请使用:


由于这个问题最初得到了回答,因此出现了一个更好的解决方案

大多数现代浏览器现在都支持使用,它提供对
href
主机名
路径
的访问,以及所有拆分URL的标准方式

要获取域,可以执行以下操作:

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

组合:但不使用折旧的
getSelected
和。想知道这是否可以通过
getCurrent

来完成,这应该是可以接受的答案。对疯狂的正则表达式说不就行了!:-)@ross zurowski你能看看我关于从折旧的
getSelected
方法迁移的帖子吗?也许可以使用
getCurrent
over
query
@谢谢你的邀请。我刚刚更新了这个答案,使用了新的
query
API,而不是旧的
getSelected
one。谢谢@RossZurowski!你能以任何方式让
getCurrent
工作吗?@kinghat,我还没试过。根据,使用
query({active:true})
是获取当前选项卡的新推荐方法-我认为这是因为
getCurrent
返回
undefined