Как создать js-скрипт программно и вставить его в документ?

я создаю скрипт и вставляю его в документ при помощи примерно такого кода (мой предыдущий вопрос):

var my_script = document.createElement('script');
my_script.setAttribute('type','text/javascript');
my_script.setAttribute('src','https://mysite.ru/storage/script.js');
document.head.appendChild(my_script);
my_script.addEventListener('load', _ => function_onload());

И так всё работает.

Но мне понадобилось усложнить задачу.

Теперь у меня нет никакого сервера, с которого я мог бы загрузить скрипт.

То есть, атрибут src не будет задан.

Всё надо сделать "прямо здесь и сейчас", то есть, я могу получить (при помощи web-сервиса) текст скрипта как строку ( scriptBody ).

И вот у меня есть возможность создать скрипт, вставить его в страницу, и есть его "тело" в виде кода...

И как мне теперь сказать, что у созданного ( var my_script = document.createElement('script'); ) скрипта такое то тело?

я попробовал:

my_script.append(scriptBody);

и

my_script.source = scriptBody;

и

my_script.innerHTML = scriptBody;

Почему то это не работает.

Проверял, что не работает, я так: сделал ма-а-аленький index.html:

<html>
<head>
    <script>

    function body_onload(){
        var my_script_body = 'function myScriptFunction(){ alert(\'Hi from myScriptFunction!\'); }';
        var my_script = document.createElement('script');
        my_script.setAttribute('type','text/javascript');
        //my_script.innerText = my_script_body;
        my_script.innerHTML = my_script_body;
        document.head.appendChild(my_script);
        my_script.addEventListener( 'load', _ => myScriptFunction() );
    }

    </script>
</head>
<body onload='body_onload();'>
<h4>
    Это пример, казалось бы, простой функциональности
</h4>
</body>
</html>

Также, я попробовал просто в консоли отладки браузера нажать точку после my_script и просто просматривать свойства объхекта my_script - нет, не смог придумать, как задать скрипту его тело.

Подскажите, как можно созданному скрипту задать его код? (тело скрипта)

Спасибо!


Ответы (1 шт):

Автор решения: thisSasha

Всё работает, выводит Test. Попробуйте указывать type:

let scriptBody = `console.log('Test')`;
var my_script = document.createElement('script');
my_script.type = 'text/javascript';
my_script.innerHTML = scriptBody;
document.head.appendChild(my_script);

Также вы можете использовать eval('code').

→ Ссылка