• <bdo id='pmjdQ'></bdo><ul id='pmjdQ'></ul>
  • <tfoot id='pmjdQ'></tfoot>
    <legend id='pmjdQ'><style id='pmjdQ'><dir id='pmjdQ'><q id='pmjdQ'></q></dir></style></legend>
    <i id='pmjdQ'><tr id='pmjdQ'><dt id='pmjdQ'><q id='pmjdQ'><span id='pmjdQ'><b id='pmjdQ'><form id='pmjdQ'><ins id='pmjdQ'></ins><ul id='pmjdQ'></ul><sub id='pmjdQ'></sub></form><legend id='pmjdQ'></legend><bdo id='pmjdQ'><pre id='pmjdQ'><center id='pmjdQ'></center></pre></bdo></b><th id='pmjdQ'></th></span></q></dt></tr></i><div id='pmjdQ'><tfoot id='pmjdQ'></tfoot><dl id='pmjdQ'><fieldset id='pmjdQ'></fieldset></dl></div>

    <small id='pmjdQ'></small><noframes id='pmjdQ'>

      1. 为什么浏览器不运行&lt;脚本&gt;在通过 fetch API 检索的 HTML 片段中?

        Why doesn#39;t a browser run a lt;scriptgt; in an HTML fragment retrieved via fetch API?(为什么浏览器不运行lt;脚本gt;在通过 fetch API 检索的 HTML 片段中?)

          <legend id='22HDV'><style id='22HDV'><dir id='22HDV'><q id='22HDV'></q></dir></style></legend>
            <tfoot id='22HDV'></tfoot>

              1. <i id='22HDV'><tr id='22HDV'><dt id='22HDV'><q id='22HDV'><span id='22HDV'><b id='22HDV'><form id='22HDV'><ins id='22HDV'></ins><ul id='22HDV'></ul><sub id='22HDV'></sub></form><legend id='22HDV'></legend><bdo id='22HDV'><pre id='22HDV'><center id='22HDV'></center></pre></bdo></b><th id='22HDV'></th></span></q></dt></tr></i><div id='22HDV'><tfoot id='22HDV'></tfoot><dl id='22HDV'><fieldset id='22HDV'></fieldset></dl></div>

                  <tbody id='22HDV'></tbody>
              2. <small id='22HDV'></small><noframes id='22HDV'>

                  <bdo id='22HDV'></bdo><ul id='22HDV'></ul>
                  本文介绍了为什么浏览器不运行&lt;脚本&gt;在通过 fetch API 检索的 HTML 片段中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在尝试使用 fetch API 获取 HTML 片段,然后将其添加到 HTML 页面.虽然这适用于 HTML 内容,但我注意到如果我在片段中放置一个 <script> 标记,该标记不会被剥离,但它也不会被执行.

                  I was experimenting with getting a fragment of HTML using the fetch API, and then adding it to an HTML page. While this works fine for HTML content, I noticed that if I put a <script> tag in the fragment, the tag isn't stripped out, but it also isn't executed.

                  下面是一个例子.我希望 alert 会触发,但它不会触发,即使脚本标记出现在页面上.

                  Below is an example. I would expect the alert to fire, but it doesn't, even though the script tag appears on the page.

                  我的问题是 (1) 为什么 <script> 没有得到评估,以及 (2) 有没有办法让它评估?

                  My questions are (1) why does the <script> not get evaluated, and (2) is there a way to make it evaluate?

                  <!DOCTYPE html>
                  <html>
                    <head>
                      <meta charset="utf-8" />
                      <title>Index</title>
                    </head>
                    <body>
                      <script src="main.js"></script>
                    </body>
                  </html>
                  

                  fragment.html

                  <h1>Hello</h1>
                  <p>It works</p>
                  <script>
                    alert('hello') // doesn't work, but script still appears on page
                  </script>
                  

                  main.js

                  fetch('fragment.html').then((res)=>{
                    return res.text()
                  }).then((data)=>{
                    var div = document.createElement('div')
                    div.innerHTML = data
                    document.body.appendChild(div)
                  })
                  

                  推荐答案

                  因为这就是 HTML 规范规定:

                  使用innerHTML 插入的脚本元素在被插入时不会执行插入.

                  script elements inserted using innerHTML do not execute when they are inserted.

                  我在这里做出假设,但可能是为了引入一层安全性,这样您就不会意外引入 XSS 或 代码注入.

                  I'm making assumptions here, but it's probably to introduce a layer of security so that you don't accidentally introduce XSS or code injection.

                  如果你想让脚本运行,获取它们的内容,创建一个特定的 <script> 元素,将脚本的主体设置为内容,然后将其插入到 DOM 中:

                  If you want to get the scripts to run, take their content, create a specific <script> element, set the script's body to the content, and then insert that into the DOM:

                  const script = document.createElement("script"),
                    text = document.createTextNode("console.log('foo')");
                  
                  script.appendChild(text);
                  document.body.appendChild(script);

                  这篇关于为什么浏览器不运行&lt;脚本&gt;在通过 fetch API 检索的 HTML 片段中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Fetch multiple links inside foreach loop(在 foreach 循环中获取多个链接)
                  Backbone Fetch Request is OPTIONS method(Backbone Fetch Request 是 OPTIONS 方法)
                  Fetch API leaks memory in Chrome(Fetch API 在 Chrome 中泄漏内存)
                  How can I download and save a file using the Fetch API? (Node.js)(如何使用 Fetch API 下载和保存文件?(Node.js))
                  Send blob data to node using fetch, multer, express(使用 fetch、multer、express 将 blob 数据发送到节点)
                  Sending a custom User-Agent string along with my headers (fetch)(发送自定义用户代理字符串以及我的标头(获取))
                  1. <i id='vXPyw'><tr id='vXPyw'><dt id='vXPyw'><q id='vXPyw'><span id='vXPyw'><b id='vXPyw'><form id='vXPyw'><ins id='vXPyw'></ins><ul id='vXPyw'></ul><sub id='vXPyw'></sub></form><legend id='vXPyw'></legend><bdo id='vXPyw'><pre id='vXPyw'><center id='vXPyw'></center></pre></bdo></b><th id='vXPyw'></th></span></q></dt></tr></i><div id='vXPyw'><tfoot id='vXPyw'></tfoot><dl id='vXPyw'><fieldset id='vXPyw'></fieldset></dl></div>

                        <tbody id='vXPyw'></tbody>
                        <legend id='vXPyw'><style id='vXPyw'><dir id='vXPyw'><q id='vXPyw'></q></dir></style></legend>

                          <bdo id='vXPyw'></bdo><ul id='vXPyw'></ul>
                          <tfoot id='vXPyw'></tfoot>

                        • <small id='vXPyw'></small><noframes id='vXPyw'>