Проблема безопасности IE11 при тестировании внешних ссылок на регулярное выражение

#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) ?