Когда я пытаюсь добавить их с атрибутами integrity
и crossorigin
, я получаю ошибку CORS для каждого.
Когда я удаляю атрибуты и просто указываю src
/ href
sВроде работает:
function addHeadTag(tag, options) {
let item = document.createElement(tag);
Object.assign(item, options, { async: false });
document.querySelector("head").appendChild(item)
}
function avoidFouc() {
document.body.style.opacity = 1;
}
addHeadTag('link', {
rel: 'stylesheet',
href: 'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css',
onload: avoidFouc
});
addHeadTag('script', {
type: 'application/javascript',
src: 'https://code.jquery.com/jquery-3.3.1.slim.min.js'
});
addHeadTag('script', {
type: 'application/javascript',
src: 'https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js'
});
addHeadTag('script', {
type: 'application/javascript',
src: 'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js'
});
body {
opacity: 0;
transition: opacity .2s ease-in-out;
}
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
Примечание: я не знаю достаточно о CORS, чтобы сказать вам, почему происходит сбой, когда integrity
и crossorigin
указаны для динамически добавляемыхтеги.
Но я заметил, что это работает без них.
Я также заметил, что этот метод вызывает FOUC , поэтому я добавил небольшую функцию, чтобы избежать этого (в основном скрывая document.body
доЗагружен CSS Bootstrap).
РЕДАКТИРОВАТЬ: {async: false}
добавлены к параметрам сценария, чтобы убедиться, что они загружаются в порядке их передачи.Должен быть удален, если порядок загрузки не имеет значения, чтобы улучшить время загрузки страницы.