【发布时间】:2021-07-28 22:31:06
【问题描述】:
注意:此问题与其他现有问题不重复,因为此问题不使用旧版本 JSDOM 使用的 jsdom.env() 函数调用。
文件bar.js:
console.log('bar says: hello')
文件foo.js:
var jsdom = require('jsdom')
var html = '<!DOCTYPE html><head><script src="bar.js"></script></head><body><div>Foo</div></body>'
var window = new jsdom.JSDOM(html).window
window.onload = function () {
console.log('window loaded')
}
当我运行foo.js 时,我得到了这个输出。
$ node foo.js
window loaded
为什么bar says: hello 没有输出?看起来bar.js 没有加载。如何让jsdom 加载script 标签中的文件?
[编辑/解决方案]:按照昆汀回答中的建议解决了问题。此代码有效:
var jsdom = require('jsdom')
var html = '<!DOCTYPE html><head><script src="bar.js"></script></head><body><div>Foo</div></body>'
var window = new jsdom.JSDOM(html, { runScripts: "dangerously", resources: "usable" }).window
window.onload = function () {
console.log('window loaded')
}
【问题讨论】:
-
@rlemon 我看不出这是那个问题的重复。该问题使用
jsdom.env()。这个没有。这个答案在这里如何适用? -
@Lone_learner :我安装了 jdsom jsdom@16.4.0,将您的代码复制到相关的
bar.js和foo.js但我无法重现您的场景。它只返回window loaded而不是bar says: hello。上面的代码是否缺少一些设置或代码? -
我发现另一个线程指向服务器加载 .js 文件。 github.com/jsdom/jsdom/issues/1914 。我仍然很想知道 Lone_Learner 和 @Quentin 是否找到了更简单的方法。
标签: javascript node.js jsdom