как использовать вывод скрипта parseFromString в другом элементе

#javascript #html #dom #browser #script-tag

Вопрос:

У меня есть строка, содержащая некоторые HTML-теги, которые поступают от администратора, и я хочу проанализировать ее и добавить на свою страницу. Эти строки могут содержать некоторые script или img с src атрибутами. Но мой браузер по какой-то причине не позволяет отображать эти сценарии.

Этот подход НЕ работает:

 <!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8" />
  <title>Hello Carnival</title>
</head>

<body id="body">
  <div id="adsParentDiv"></div>

<script>
  var adsDoc = new DOMParser().parseFromString("<script src='SOMETHING_HERE'></sc" "ript>", "text/html");
  var adsEl = adsDoc.getElementsByTagName("script")[0];
  document.getElementById("adsParentDiv").appendChild(adsEl);
  // you can use https://embed.bannerboo.com/b293b1619335f?responsive=1 instead of SOMETHING_HERE for test 
</script>
</body>

</html>
 

Скрипт не работает и отображается серым цветом в моем браузере Mozilla firefox.

Хотя этот подход действительно работает:

 <!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8" />
  <title>Hello Carnival</title>
</head>

<body id="body">
<div id="adsParentDiv"></div>

<script>
  var my_awesome_script = document.createElement('script');
  var adsDoc = new DOMParser().parseFromString("<script src='SOMETHING_HERE'></sc" "ript>", "text/html");
  var scriptTag = adsDoc.getElementsByTagName("script")[0];
  my_awesome_script.setAttribute('src', scriptTag.getAttribute("src"));
  document.getElementById("adsParentDiv").appendChild(my_awesome_script);
  // you can use https://embed.bannerboo.com/b293b1619335f?responsive=1 instead of SOMETHING_HERE for test 
</script>
</body>

</html>

 

Но я не могу использовать его, так как я сказал, что администратор может загрузить строку с img тегом или даже один div .

1 — Я хочу проанализировать ввод HTML администратора с помощью любого тега и заставить браузер запустить его.
2 — Я хочу знать, почему первый подход работает, а второй-нет. Заблокирован ли он по соображениям безопасности? Что это за причина?

Заранее спасибо.