jsdom.env:本地jquery脚本不起作用

时间:2011-12-12 21:06:34

标签: node.js jsdom

  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' - 一切正常。

有什么问题?

3 个答案:

答案 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 });