javascript - 如何将 html 代码块分配给 javascript 变量(以调用 javascript 调用)

标签 javascript html

我想将一段 html 代码分配给一个 js 变量

html代码是

<script>alert('test');</script>

我想做这个

var script = "<script>alert('test');</script>";

document.getElementById('test').innerHTML = script;

但是不起作用

如果我用标签(或任何其他标签)替换标签,那么它就可以工作。

var script = "<span>alert('test');</span>";

我试过了

var script = "<script>alert('test');</script>";
eval(script);

eval ("<span>alert('test');</span>");

但它们都有语法错误。

这可能与脚本标签内有脚本标签有关

<script> <script> </script> </script>

有办法解决这个问题吗?

TIA

最佳答案

您不能注入(inject) <script>元素使用 .innerHTML并期望它进行评估。您必须使用 evaldocument.write或注入(inject)<script>以“正常”方式进入 DOM。使用动态脚本,eval推荐。

请记住eval评估纯 JavaScript 并且不使用 HTML 解释器。 (将此与 PHP 的默认行为进行对比,其中 eval 就像将 ?>$string<?php 插入到文档中。)

还请记住,脚本在接近 </script> 时终止。 。插入 </script> 很奇怪无论如何,都应将其写入 JavaScript(除非您使用 document.write 方法,该方法有很多问题,在大小不是极端问题的情况下应避免)。

这是使用 eval 的示例:

var script = 'alert("test");';
eval(script);

如果要将脚本与其他元素一起注入(inject)到 DOM 中,则需要提取<script>注入(inject)后的元素并执行(内部或外部)脚本。像 jQuery 和 Prototype 这样的框架会自动执行此操作,这也是推荐它们而不是普通 JavaScript 的众多原因之一。

关于javascript - 如何将 html 代码块分配给 javascript 变量(以调用 javascript 调用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3433638/

相关文章:

html - Bootstrap 布局——div 未正确对齐

HTML 选择下拉箭头样式

javascript - 每 N 个项目分解一个 {{# each}} block

javascript - 在 Javascript 中使用 Laravel Blade 和 Dropzone -> 上传的最大文件总数

javascript - knockout 样式绑定(bind)不会更新左侧和顶部

javascript - 如何用mysql数据填充Charts.js?

javascript - 使用 jQuery 设置元标记

javascript - 为什么像 `toString` 这样的方法需要在数字后加两个点?

javascript - 设置倒计时器的日期

html - Bootstrap 3 列内的相对 div 不受尊重