当前位置: 首页 > 面试题库 >

使用div的innerHTML创建的脚本标签不起作用

费朗
2023-03-14
问题内容

这是JS代码:

var wrap = document.createElement("div");
wrap.innerHTML = '<script type="text/javascript" src="'+scriptUrl+'"></script>';
var wrapscript = wrap.childNodes[0];
document.body.appendChild(wrapscript)

主体确实插入了script元素,但是没有加载JS资源,甚至没有http请求。

有人可以解释为什么会这样吗?

问题出在Zeptojs的$方法上

$('<script type="text/javascript" src="'+scriptUrl+'"></script>').appendTo($("bdoy"))

它的工作方式类似于上面的代码,并导致该错误。


问题答案:

这是微不足道的。

如规范中所述8.4解析HTML片段和8.2.3.5其他解析状态标志,)引用:

使用innerHTML浏览器时_

  1. 创建一个新的Document节点,并将其标记为HTML文档。

2.
如果存在一个context元素,并且context元素的Document处于quirks模式,则让Document处于quirks模式。否则,如果存在一个context元素,并且context元素的Document处于受限怪癖模式,则让Document处于受限怪癖模式。否则,将文档保留为非怪异模式。

  1. 创建一个新的HTML解析器,并将其与刚创建的Document节点相关联。…

当解析<script>内部时

如果在创建解析器时为与解析器关联的文档启用了脚本,则将脚本标记设置为“已启用”,否则为“禁用”。

即使最初为HTML片段解析算法创建了解析器,也可以启用脚本标记,即使在这种情况下脚本元素不执行也是如此。

因此,只要您注入,它就不会执行innerHTML

使用innerHTML将阻止创建 <script>元素永久执行。

如规范(4.3.1脚本元素,)所述:

动态更改src,type,charset,async和defer属性不会产生直接影响。这些属性仅在以下所述的特定时间使用。

得出 _以下_结论是,它仅src在将注入<script>到时解析属性document(无论哪个,包括使用时创建的临时属性innerHTML)。

因此,只要要将脚本注入文档并使其执行,就必须使用script = document.createElement('script')

将其属性设置为srctype,并可能在其中设置内容(使用script.appendChild(document.createTextNode(content))),然后将其附加到document.body



 类似资料:
  • 我正在注入这样一个脚本: 这会生成如下标记: 我更喜欢以下语法: 将选项传递给jQuery DOM元素创建者时是否支持此功能?或者,我应该只使用普通JavaScript来实现这一点吗?

  • 问题内容: 我创建了一个redis lua脚本来执行基于关键数据类型的命令: 每次执行时,它都会返回null。请帮助纠正脚本。 问题答案: 对响应的返回形式如下表:(如果类型为字符串,则返回) 因此,为了正确检查,您应该将代码更改为: 其余代码将正常运行。 问题是这样的:TYPE命令是少数几个返回“简单字符串”或“状态” redis答复的命令之一(有关响应类型,请参见redis协议规范)。在red

  • 问题内容: 我试图使用React中的dragonallySetInnerHTML属性设置从服务器发送的html以显示在div中。我里面也有script标签,并使用在html内相同定义的函数。我在这里在JSFiddle中给出了错误示例。 这是测试代码: 我检查了该脚本标记并将其添加到DOM,但是无法调用该脚本标记中定义的功能。如果这不是正确的方法,那么还有其他方法可以注入脚本标签的内容。 问题答案:

  • views.php 上面的视图代码用于显示文本和url。如果用户只发布文本,则else部分将起作用,如果用户发布文本时同时发布url,则第一个条件起作用。 如果用户发布文本,点击该文本将把用户带到另一个页面。这也适用于如果用户发布两个文本与你管网址也。点击这里的文字,应该会把他带到下一个屏幕。 问题是,如果用户将文本与YouTube url一起发布,并且文本之间存在YouTube url,则You

  • 我有一个半完美的代码,但它没有更新字段:3R利润公式:,目标销售价格:,总目标利润:,目标收益:,其实它在更新字段,但我仍然需要使用TAB按钮,并在填充更改之前转到某些字段,但我希望它在我更改相关字段后立即自动更新。。。 它应该做的是自动更新文件3R利润公式:,目标销售价格:,总目标利润:,目标收益:,但似乎不能让它工作... 下面是我使用的公式,让我们现在只关注一个领域:3R利润公式 首先我们需

  • 创建和使用脚本 游戏对象的行为由绑定的 组件 所控制。尽管 Unity 内置的组件非常灵活多样,但是你很快就会发现它们提供的功能远远不够,为了实现你所要的游戏功能,你需要超越它们才行。Unity 支持通过 脚本 创建属于你自己的组件。在组件中,随着时间的推移,你可以触发游戏事件、修改组件属性,还可以以任何你喜欢的方式来响应用户输入。 Unity 内置支持两种编程语言: C# 一种工业标准语言,类似