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

时间:2016-10-10 16:06:31

标签: html node.js dom phantomjs jsdom

我正在创建一个Node脚本,该脚本读取HTML文件,将其作为DOM文档进行操作,并将其序列化为另一个文件。我现在正在使用jsdom

我需要做的一个操作是添加一个<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragment_account" android:padding="@dimen/activity_horizontal_margin" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:text="Hello Android!"/> <Button android:id="@+id/add_person" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center" android:text="Add People"/> </RelativeLayout> 元素,其JavaScript代码将对DOM进行进一步操作。

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

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

我没有使用jsdom的特殊限制,我可以切换到PhantomJS或其他任何东西,但我需要生成一个HTML文件,其中添加了一个脚本,而不是在执行我的Node程序时运行脚本

有办法吗?

1 个答案:

答案 0 :(得分:1)

使用此选项禁用jsdom中的Javascript执行

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

如果nodejs也在jsdom中生成错误禁用突变事件

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