Как лучше всего определить, принадлежит ли URL текущему домену в JavaScript? - PullRequest
0 голосов
/ 13 марта 2020

У меня есть URL. Он может быть относительным (например, не начинаться с https: //, et c.) Или может не быть (начинается с https: //, et c.).

Как я могу определить, относится ли этот URL к тому же домену, что и window.location?

(я создаю запрос XMLHttpRequest и добавляю к нему повара ie. Можно добавить только повара ie, если URL I ' Я прошу столько же, сколько и я. Это секретный повар ie.)

Ответы [ 2 ]

3 голосов
/ 13 марта 2020

Самый простой способ - использовать 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;
}
1 голос
/ 13 марта 2020

Вы можете создать объект URL из URL для проверки и сравнить его с источником текущего местоположения:

const sameOrigin = new URL('URL_TO_TEST').origin === window.location.origin;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...