Чтобы набросать мою проблему: у нас есть приложение 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 для всех созданных сценариев.
И вот тут возникают реальные вопросы:
Есть ли простой способ сделать это с angular -cli? Вне написания какого-то сценария узла, который делает это для меня.
Возможно, я подхожу к этой проблеме с неправильной точки зрения? Есть ли лучший способ решить эту проблему отправки учетных данных?
И бонусный вопрос: почему IE11 не может обработать (для него) неизвестный атрибут crossorigin
? Я думал, что неизвестные атрибуты просто игнорируются.