Dynami c загрузка скрипта показывает различное поведение для одного и того же JS файла - PullRequest
3 голосов
/ 05 марта 2020

При загрузке JS SDK на наш сайт я пробовал несколько разных способов. Я заметил, что Snippet 1 вызывает ошибку CORS, в то время как Snippet 2 загружает тот же сценарий на на той же странице без проблем.

Snippet 1 ( Используя document.body.appendChild, выдает исключение CORS)

 const url = 'https://www.example.com/sdk.js';
 const scriptTag = document.createElement('script');
 scriptTag.setAttribute('crossorigin', 'anonymous');
 scriptTag.setAttribute('src', url);
 document.body.appendChild(scriptTag);

Фрагмент 2 (с использованием parentNode.insertBefore, без исключения CORS)

 const element = document.getElementsByTagName('script')[0];
 const scriptTag = document.createElement('script');

 scriptTag.async = !0;
 scriptTag.crossorigin = 'anonymous';
 scriptTag.src = 'https://www.example.com/sdk.js';
 element.parentNode.insertBefore(scriptTag, element);

Я пытался выяснить, почему поведение отличается для каждого случая, но не смог найти для этого никакой причины.

Может ли кто-нибудь указать мне, почему я вижу это поведение?

1 Ответ

1 голос
/ 06 марта 2020

Единственное отличие, которое я вижу при запуске вашего кода, заключается в том, что @Pointy указывает на комментарий, первый скрипт генерирует:

<script crossorigin="anonymous" src="https://www.example.com/sdk.js"></script>

, второй:

<script async="" src="https://www.example.com/sdk.js"></script>

выполняется на моей консоли, поэтому, вероятно, crossorigin отвечает за ошибку Cors. (то же самое произошло на консоли, кстати)

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