Angular CLI - выборочное использование атрибута crossorigin скрипта - PullRequest
0 голосов
/ 04 мая 2020

Чтобы набросать мою проблему: у нас есть приложение angular, которое обслуживается basi c auth защищенным сервером. Предполагается, что это приложение будет работать среди прочих в IE11 и Safari 12. И у нас есть дифференциальная сборка для сред es5 и es2015 +.

Теперь, когда речь идет о сборке index. html, Safari 12 требуется для наличия атрибута crossorigin на <script type="module"> для отправки учетных данных BA на сервер, защищенный BA (хотя домен клиента и сервера совпадают) , Без атрибута он не отправляет их, и запрос завершается с 401. Оказывается, что некоторые старые браузеры, такие как Safari 12, реализуют более старую версию spe c для type=module извлечения сценария, которая не отправляет аутентификационные учетные данные автоматически. В новых браузерах реализована более новая версия spe c, и учетные данные отправляются правильно (поэтому Safari 13 работает для меня).

Поэтому я решил исправить эту проблему, установив атрибут crossorigin="anonymous" через angular. json. Это приводит к тому, что каждая сборка выдает <script> s для пакетов es5 и es2015 с этим атрибутом, что исправило проблему в Safari 12. Пока все хорошо.

Но потом я обнаружил, что IE11 плохо обрабатывает этот атрибут. Фактически, атрибут crossorigin не поддерживается в IE11, что не должно иметь значения, но он не отправляет учетные данные при отправке запроса на скрипт, независимо от его type="", который, естественно, снова завершается с 401. Когда я удаляю атрибут crossorigin, это исправляет проблему в IE11, но угадайте, что, снова ломает Safari 12.

Учитывая все это, логичным решением было бы добавить crossorigin только к es2015 скрипты (для Safari 12) и оставьте скрипты es5 нетронутыми (для IE11). Это сложнее, чем кажется, потому что, как кажется, angular -cli не имеет возможности различать guish в зависимости от цели ES. Он просто предоставляет возможность установить crossorigin для всех созданных сценариев.

И вот тут возникают реальные вопросы:

  1. Есть ли простой способ сделать это с angular -cli? Вне написания какого-то сценария узла, который делает это для меня.

  2. Возможно, я подхожу к этой проблеме с неправильной точки зрения? Есть ли лучший способ решить эту проблему отправки учетных данных?

  3. И бонусный вопрос: почему IE11 не может обработать (для него) неизвестный атрибут crossorigin? Я думал, что неизвестные атрибуты просто игнорируются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...