jsdom.env({
html: "<html><body></body></html>",
scripts: [
//'http://code.jquery.com/jquery-1.5.min.js'
'http://server.local:3000/jquery/jquery.min.js'
]
}, function (err, window) {
它不起作用脚本是'http://server.local:3000 / jquery / jquery.min.js'(使用浏览器可用)jquery.min.js是jquery-1.5.min.js的副本
如果脚本是'http://code.jquery.com/jquery-1.5.min.js' - 一切正常。
有什么问题?
答案 0 :(得分:6)
这不是你问题的直接答案,但也许其他人就像我一样来到这个问题。
您可以在脚本条目中指定本地文件。只需在其中放置绝对路径或添加documentRoot条目并使用相对路径。 E.g。
jsdom.env({
html: "<html><body></body></html>",
documentRoot: __dirname + '/lib',
scripts: [
'jquery/jquery.min.js'
]
}, function (err, window) {
}
);
答案 1 :(得分:0)
function domify(cb){
var file= __dirname + '/public/jquery.js';
var jquery = fs.readFileSync(file).toString();
jsdom.env({
html: "<html><body></body></html>",
src: [jquery],
done: function (err, window) {
cb(err,window);
}
});
}
这对我有用
答案 2 :(得分:0)
问题询问jsdom是否尝试获取URL http://server.local:3000/jquery/jquery.min.js'标识的资源,然后执行(将获取的文件(jquery.min.js)中的javascript函数添加到jsdom的窗口对象上下文中DOM对象实际上,我们正在尝试Web浏览器在读取和解析标签并模拟将jQuery库加载到jsdom DOM“窗口”对象中时的作用。
解决方法是使用Node的fs模块从文件系统中获取jquery.min.js库,但不作为HTTP FETCH请求。正如变通方法代码清楚地表明的那样,将jQuery库作为文件读入数组,然后将该数组直接传递给jsdom函数,而不是作为jsdom DOM窗口对象。
在GitHub上的jsdom文档中,有一段代码,并说明了如何从URL向jsdom模块创建的DOM窗口对象执行HTTP谓词GET请求(请参见下文)。它遵循与AJAX请求相同的模式,这正是您所期望的。是的,解决方法是从服务器文件所在的文件系统中获取jQuery库。但是,这实际上并不是解决jsdom中问题的“解决方法”,而是解决了一个截然不同的用例,其中URL被jQuery文件的文件系统引用(文件名/目录)代替。
const dom = new JSDOM(``,{ 网址:“ https://example.org/”, 推荐人:“ https://example.com/”, contentType:“ text / html”, includeNodeLocations:true, 存储配额:10000000 });