Плагин Google Chrome: как получить домен из URL (tab.url)

Используя API Google Chrome 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);
    });
}

Ответы

Ответ 1

С момента ответа на этот вопрос было найдено лучшее решение.

Большинство современных браузеров теперь поддерживают конструктор URL, который обеспечивает доступ к href, hostname, path и все стандартные способы разделения 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'
})

Ответ 2

Прежде всего, домены не включают протокол. Я создал регулярное выражение для вашей проблемы. Чтобы получить имя хоста (вы хотите сделать это, поскольку IP-адреса не являются доменами) URI, используйте следующее:

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

Если вы хотите, чтобы вместо домена использовался источник (протокол + хост (не имя хоста, разница) + дополнительный порт), используйте следующее:

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