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

怎么了?

4

3 回答 3

6

这不是您问题的直接答案,但也许其他人会像我一样提出这个问题。

您可以在脚本条目中指定本地文件。只需在其中放置一个绝对路径或添加一个 documentRoot 条目并使用相对路径。例如

jsdom.env({
        html: "<html><body></body></html>",
        documentRoot: __dirname + '/lib',
        scripts: [
            'jquery/jquery.min.js'
        ]
    }, function (err, window) {
    }
);
于 2012-01-15T23:23:11.363 回答
0

问题询问 jsdom 是否尝试获取由 URL http://server.local:3000/jquery/jquery.min.js标识的资源,然后执行(在获取的文件中添加 javascript 函数(jquery.min.js ) 到 jsdom DOM 对象的 window 对象上下文中。实际上,我们正在尝试 Web 浏览器在读取和解析标记并模拟将 jQuery 库加载到 jsdom DOM 'window' 对象时所做的事情。

解决方法是使用 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(``, { url: " https://example.org/ ", referrer: " https://example.com/ ", contentType: "text/html", includeNodeLocations: true, storageQuota: 10000000 });

于 2019-02-16T21:59:09.583 回答
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);
        }
    });
}

这对我有用

于 2015-07-20T18:56:38.273 回答