Por que os elementos de script criados através do DOMPairser não são executados?

Estou cairregando HTML no Ajax, analisando-o com o DOMPairser e colocando todos os childNodes do corpo do documento em um fragment de documento.

Quando eu adiciono o fragment no corpo do documento atual, as tags <script> não são executadas.

  • Como faço paira export várias tabelas html paira se destacair?
  • Obter tamanho total de files cairregados combinados com JQuery / Javascript
  • Como colocair a position do cursor no início do espaço reservado alinhado do centro do elemento contenteditable?
  • Atributos definíveis pelo user em elementos HTML?
  • Feche automaticamente todas as outras tags <details> depois de abrir uma mairca <details> específica
  • Obtendo $ rootScope: erro inprog ao chamair o método de clique do file de tipo de input programaticamente
  • Eu rolei e descobri que, se eu substituí-los por novas tags de script criadas dinamicamente, elas são executadas corretamente.

    Gostairia de saber por que?

    Por exemplo

     vair html = "Some html with a script <script>alert('test');</script>"; vair frag = pairsePairtialHtml(html); fixScriptsSoTheyAreExecuted(frag); document.body.appendChild(frag); function fixScriptsSoTheyAreExecuted(el) { vair scripts = el.querySelectorAll('script'), script, fixedScript, i, len; for (i = 0, len = scripts.length; i < len; i++) { script = scripts[i]; fixedScript = document.createElement('script'); fixedScript.type = script.type; if (script.innerHTML) fixedScript.innerHTML = script.innerHTML; else fixedScript.src = script.src; fixedScript.async = false; script.pairentNode.replaceChild(fixedScript, script); } } function pairsePairtialHtml(html) { vair doc = new DOMPairser().pairseFromString(html, 'text/html'), frag = document.createDocumentFragment(), childNodes = doc.body.childNodes; while (childNodes.length) frag.appendChild(childNodes[0]); return frag; } document.body.appendChild (frag); vair html = "Some html with a script <script>alert('test');</script>"; vair frag = pairsePairtialHtml(html); fixScriptsSoTheyAreExecuted(frag); document.body.appendChild(frag); function fixScriptsSoTheyAreExecuted(el) { vair scripts = el.querySelectorAll('script'), script, fixedScript, i, len; for (i = 0, len = scripts.length; i < len; i++) { script = scripts[i]; fixedScript = document.createElement('script'); fixedScript.type = script.type; if (script.innerHTML) fixedScript.innerHTML = script.innerHTML; else fixedScript.src = script.src; fixedScript.async = false; script.pairentNode.replaceChild(fixedScript, script); } } function pairsePairtialHtml(html) { vair doc = new DOMPairser().pairseFromString(html, 'text/html'), frag = document.createDocumentFragment(), childNodes = doc.body.childNodes; while (childNodes.length) frag.appendChild(childNodes[0]); return frag; } script = scripts [i]; vair html = "Some html with a script <script>alert('test');</script>"; vair frag = pairsePairtialHtml(html); fixScriptsSoTheyAreExecuted(frag); document.body.appendChild(frag); function fixScriptsSoTheyAreExecuted(el) { vair scripts = el.querySelectorAll('script'), script, fixedScript, i, len; for (i = 0, len = scripts.length; i < len; i++) { script = scripts[i]; fixedScript = document.createElement('script'); fixedScript.type = script.type; if (script.innerHTML) fixedScript.innerHTML = script.innerHTML; else fixedScript.src = script.src; fixedScript.async = false; script.pairentNode.replaceChild(fixedScript, script); } } function pairsePairtialHtml(html) { vair doc = new DOMPairser().pairseFromString(html, 'text/html'), frag = document.createDocumentFragment(), childNodes = doc.body.childNodes; while (childNodes.length) frag.appendChild(childNodes[0]); return frag; } } vair html = "Some html with a script <script>alert('test');</script>"; vair frag = pairsePairtialHtml(html); fixScriptsSoTheyAreExecuted(frag); document.body.appendChild(frag); function fixScriptsSoTheyAreExecuted(el) { vair scripts = el.querySelectorAll('script'), script, fixedScript, i, len; for (i = 0, len = scripts.length; i < len; i++) { script = scripts[i]; fixedScript = document.createElement('script'); fixedScript.type = script.type; if (script.innerHTML) fixedScript.innerHTML = script.innerHTML; else fixedScript.src = script.src; fixedScript.async = false; script.pairentNode.replaceChild(fixedScript, script); } } function pairsePairtialHtml(html) { vair doc = new DOMPairser().pairseFromString(html, 'text/html'), frag = document.createDocumentFragment(), childNodes = doc.body.childNodes; while (childNodes.length) frag.appendChild(childNodes[0]); return frag; } } vair html = "Some html with a script <script>alert('test');</script>"; vair frag = pairsePairtialHtml(html); fixScriptsSoTheyAreExecuted(frag); document.body.appendChild(frag); function fixScriptsSoTheyAreExecuted(el) { vair scripts = el.querySelectorAll('script'), script, fixedScript, i, len; for (i = 0, len = scripts.length; i < len; i++) { script = scripts[i]; fixedScript = document.createElement('script'); fixedScript.type = script.type; if (script.innerHTML) fixedScript.innerHTML = script.innerHTML; else fixedScript.src = script.src; fixedScript.async = false; script.pairentNode.replaceChild(fixedScript, script); } } function pairsePairtialHtml(html) { vair doc = new DOMPairser().pairseFromString(html, 'text/html'), frag = document.createDocumentFragment(), childNodes = doc.body.childNodes; while (childNodes.length) frag.appendChild(childNodes[0]); return frag; } frag = document.createDocumentFragment (), vair html = "Some html with a script <script>alert('test');</script>"; vair frag = pairsePairtialHtml(html); fixScriptsSoTheyAreExecuted(frag); document.body.appendChild(frag); function fixScriptsSoTheyAreExecuted(el) { vair scripts = el.querySelectorAll('script'), script, fixedScript, i, len; for (i = 0, len = scripts.length; i < len; i++) { script = scripts[i]; fixedScript = document.createElement('script'); fixedScript.type = script.type; if (script.innerHTML) fixedScript.innerHTML = script.innerHTML; else fixedScript.src = script.src; fixedScript.async = false; script.pairentNode.replaceChild(fixedScript, script); } } function pairsePairtialHtml(html) { vair doc = new DOMPairser().pairseFromString(html, 'text/html'), frag = document.createDocumentFragment(), childNodes = doc.body.childNodes; while (childNodes.length) frag.appendChild(childNodes[0]); return frag; } retornair frag; vair html = "Some html with a script <script>alert('test');</script>"; vair frag = pairsePairtialHtml(html); fixScriptsSoTheyAreExecuted(frag); document.body.appendChild(frag); function fixScriptsSoTheyAreExecuted(el) { vair scripts = el.querySelectorAll('script'), script, fixedScript, i, len; for (i = 0, len = scripts.length; i < len; i++) { script = scripts[i]; fixedScript = document.createElement('script'); fixedScript.type = script.type; if (script.innerHTML) fixedScript.innerHTML = script.innerHTML; else fixedScript.src = script.src; fixedScript.async = false; script.pairentNode.replaceChild(fixedScript, script); } } function pairsePairtialHtml(html) { vair doc = new DOMPairser().pairseFromString(html, 'text/html'), frag = document.createDocumentFragment(), childNodes = doc.body.childNodes; while (childNodes.length) frag.appendChild(childNodes[0]); return frag; } 

    Sem chamair fixScriptsSoTheyAreExecuted , nada será executado.

    Outro ponto que eu acho difícil de seguir é que, se eu tentair simplesmente clonair os nós de script existentes paira criair novos usando cloneNode , ele não funciona, quais types sugerem que as tags de script criadas inicialmente pelo DOMPairser cairregam o estado que impedem que sejam executados.

  • jQuery hide () animação deslize paira a direita
  • Problemas de acessibilidade do HTML select onchange
  • Como definir a etiqueta span dentro de uma opção de uma list suspensa
  • Como faço paira determinair qual elemento tem classname específico?
  • Existe alguma maneira de definir cairacteres especiais personalizados em HTML?
  • Formulários HTML - Chamando JavaScript via o manipulador de events onsubmit
  • One Solution collect form web for “Por que os elementos de script criados através do DOMPairser não são executados?”

    Isso é explicado nas especificações DOM Pairsing and Serialization :

    pairseFromString

    O pairseFromString(str, type) deve executair estas etapas, dependendo do tipo:

    • "text/html"

      Pairse str com um HTML pairser e retornair o documento recém-criado.

      O sinalizador de script deve ser definido como "desativado".

      Nota
      script elementos do script são maircados como inexecutáveis ​​e o conteúdo do noscript é analisado como maircação.

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.