将脚本元素添加到DOM而不执行它

将脚本元素添加到DOM而不执行它

问题描述:

我正在创建一个读取HTML文件,将其作为DOM文档操作并将其序列化回另一个文件的节点脚本。我现在使用jsdom将脚本元素添加到DOM而不执行它

我需要做的一个操作是添加一个<script>元素,其JavaScript代码将对DOM进一步操作。

问题是,只要我将脚本添加到jsdom节点,jsdom就会运行它,并且第二个操作阶段立即完成,因此输出HTML是错误的。

我以为只会发生在PhantomJS中,而不是jsdom,但我错了。

我对使用jsdom没有特别的限制,我可以切换到PhantomJS或其他任何东西,但是我需要生成一个HTML文件,并且在执行我的Node程序期间不添加脚本而添加脚本。

有没有办法做到这一点?

+0

你能不能跟注释整个脚本,然后添加js脚本以后在生成最终输出之前删除它们?为了保持它的独特性,它可能是“/ *”+一些唯一标识符的组合?这只是一个黑客。 – Netham

+0

'innerHTML'不会执行脚本标记(不过不知道jsdom的情况)。 – 2016-10-10 16:43:10

使用此来禁用jsdom的Javascript执行

jsdom.defaultDocumentFeatures = { 
FetchExternalResources: false, 
ProcessExternalResources: false 
}; 

如果产生的NodeJS禁用错误突变事件也jsdom

jsdom.defaultDocumentFeatures = { 
FetchExternalResources: false, 
ProcessExternalResources: false, 
MutationEvents : false 
}; 
+0

它的工作原理! :) 太感谢了 –