Плагин 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"