Я отвечал на аналогичный вопрос и получил еще одну идею, как этого добиться без использования eval()
:
const source = "alert('test')";
const el = document.createElement("script");
el.src = URL.createObjectURL(new Blob([source], { type: 'text/javascript' }));
document.head.appendChild(el);
В приведенном выше коде вы в основном создаете Blob, содержащий ваш скрипт, чтобы создать объект URL (представление объекта File или Blob в памяти браузера). Поскольку у вас есть свойство src
в теге <script>
, скрипт будет выполняться так же, как если бы он был загружен с любого другого URL.