#javascript #jquery #regex #internet-explorer #internet-explorer-11
#javascript #jquery #регулярное выражение #internet-explorer #internet-explorer-11
Вопрос:
Я использую следующий код jQuery, чтобы убедиться, что внешние ссылки открываются в новой вкладке на моем веб-сайте:
$('a:not(.magnific-video)').each(function () {
var extLink = new RegExp('/' window.location.host '/');
if (!extLink.test(this.href)) { // IE11 throws the security problem here
$(this).click(function (event) {
event.preventDefault();
event.stopPropagation();
window.open(this.href, '_blank');
});
}
});
Это отлично работает во всех браузерах, кроме Internet Explorer. Как ни странно, этот скрипт запускается на каждой странице моего сайта, но ошибка возникает только на странице контактов (в IE11). Когда я загружаю страницу контактов, я получаю SCRIPT14: A security problem occured.
сообщение об ошибке в консоли, которое указывает на строку, которую я прокомментировал в приведенном выше коде (строка с .test()
), и ни один из других javascript на странице не работает. Все страницы на моем сайте имеют внешние ссылки (в нижнем колонтитуле и в других местах), поэтому единственное различие между другими страницами и страницей контактов заключается в том, что она загружает карты Google через их API для отображения карты на странице (возможно, это как-то связано с этим, поскольку это единственное заметное отличие по сравнению сна другие страницы).
Что я ищу
Исправление проблемы безопасности в Internet Explorer, чтобы все другие скрипты на странице контактов работали так же, как и в других браузерах.
РЕДАКТИРОВАТЬ / ОБНОВЛЯТЬ
Я заменил свой сценарий выше следующим, который я нашел на GitHub. Похоже, он делает то же самое, и я больше не сталкиваюсь с проблемой безопасности в IE11… не решение для сценария, описанного выше, не работает, поэтому я не ставлю его в качестве ответа.
$('a:not(.magnific-video)')
.filter('[href^="http"], [href^="//"]')
.not('[href*="' window.location.host '"]')
.attr('rel', 'noopener noreferrer')
.attr('target', '_blank');
Комментарии:
1. Ваше регулярное выражение, похоже, не делает ничего необычного, почему бы вместо этого не выполнить поиск по строке
if (this.href.indexOf(window.location.host) < 0 ...
?2. @AlexK. Я все еще получаю проблему безопасности, когда заменяю регулярное выражение этим кодом :/
3. Как выглядит ошибочный URL-адрес?
4. @AlexK. проблема безопасности возникает не при нажатии на ссылку, а при загрузке страницы, поэтому я не думаю, что это связано с какой-либо из ссылок, но ссылка, которая соответствует этому условию, — это любая ссылка, у которой нет ‘websitename.com «в нем, то есть ссылка на»google.com «было быпередайте оператор if, но ‘websitename.com/contact — не стал бы
5. Странно, это все еще происходит, если вы
var x = this.href;
тогда.test(x)
?