谷歌Chrome插件:如何从URL获取域名(tab.url)

时间:2010-09-11 01:22:53

标签: javascript google-chrome google-chrome-extension

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

3 个答案:

答案 0 :(得分:34)

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

现在大多数现代浏览器都支持使用URL constructor,它可以访问hrefhostnamepath以及分割网址的所有标准方式。

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

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的组合,但不使用折旧的getSelectedhttps://stackoverflow.com/a/48755190/8023318。想查看是否可以通过getCurrent完成此操作。