Есть ли безопасный / защищенный от ошибок способ JS, чтобы проверить, является ли ссылка в HTML «активной», сравнивая ее с текущим URL?
Это зависит от того,хотите рассмотреть параметры запроса и / или хэш.
Относительная / абсолютная вещь не проблема, используйте элемент привязки 'href
свойство (не атрибут), который будет разрешен (абсолютный).Или используйте различные отдельные части элемента привязки (protocol
, host
и т. Д.).К элементам привязки относятся HTMLHyperlinkElementUtils
mixin :
interface mixin HTMLHyperlinkElementUtils {
[CEReactions] stringifier attribute USVString href;
readonly attribute USVString origin;
[CEReactions] attribute USVString protocol;
[CEReactions] attribute USVString username;
[CEReactions] attribute USVString password;
[CEReactions] attribute USVString host;
[CEReactions] attribute USVString hostname;
[CEReactions] attribute USVString port;
[CEReactions] attribute USVString pathname;
[CEReactions] attribute USVString search;
[CEReactions] attribute USVString hash;
};
Если вы хотите включить параметры запроса и хэш, то
if (link.href === location.href)
Помните, что порядок параметров запроса может быть значительным.Часто не является значимым, и в этом случае приведенное выше не будет работать для «эквивалентных» URL, таких как http://example.com?foo=a&bar=b
и http://example.com?bar=b&foo=a
, если для этого ресурса относительный порядок foo
и bar
не имеет значенияВ этом случае вам нужно будет проанализировать параметры запроса и сравнить их так, чтобы правила ресурса учитывали, когда и где порядок имеет значение.(В большинстве случаев, например, ?foo=1&foo=2&bar=x
и ?foo=2&foo=1&bar=x
- это не одно и то же, но ?foo=1&foo=2&bar=x
и ?bar=x&foo=1&foo=2
и ?foo=1&bar=x&foo=2
. Но опять же, это зависит от ресурса.)
Если нет, вам нужно выбрать те части, которые вы считаете одинаковыми, и сравнить их.location
поддерживает отдельные детали, как это делают элементы анкера (protocol
, host
и т. Д.).