Как создать 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 шт):
Всё работает, выводит 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')
.