Самый простой способ - использовать DOM: когда вы вставляете URL-адрес в тег <a>
, браузер немедленно разрешает URL-адрес, т. Е. Когда вы извлекаете атрибут элемента href
, используя JS, он вернет абсолютный путь.
Затем вы можете просто проверить, содержит ли разрешенный путь window.location.origin
:
function doesUrlBelongsToCurrentDomain(url) {
const link = document.createElement('a');
link.href = url;
return link.href.includes(window.location.origin);
}
console.log(doesUrlBelongsToCurrentDomain('https://google.com')); // false
console.log(doesUrlBelongsToCurrentDomain('./relative-link')); // true
console.log(doesUrlBelongsToCurrentDomain('/relative-link')); // true
Для версии, совместимой с ES5, поменяйте местами String.prototype.includes
с String.prototype.indexOf
:
return link.href.indexOf(window.location.origin) !== -1;
Кроме того, если ваш браузер не поддерживает window.location.origin
, вам необходимо создать его вручную:
var origin = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
... следовательно, IE11-совместимая версия (если поддержка IE11 абсолютно необходима), будет следующим:
function doesUrlBelongsToCurrentDomain(url) {
var link = document.createElement('a');
link.href = url;
var origin = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
return link.href.indexOf(origin) !== -1;
}