7

我正在尝试让 jsdom 工作:)

这是代码:

var jsdom = require("jsdom");
var request = require("request");
var fs     = require('fs');
var jquery = fs.readFileSync("./jquery-1.7.2.js", 'utf-8');

request({ uri:'http://nodejs.org/dist/' }, function (error, response, body) {
    if (error && response.statusCode !== 200) {
        console.log('HTTP request error... '+error);
    }
    jsdom.env({
        html: body,
        scripts: [
            jquery
        ],
        done: function(errors, window) {
            console.log('done');
        }
    });
});

这是错误:

jsdom.js:171
    features   = JSON.parse(JSON.stringify(window.document.implementation._fea
                                                          ^
TypeError: Cannot read property 'implementation' of undefined

我检查了页面是否被获取以及 jquery 库是否被解析——它们是。

我们可以看看 jsdom.js 的实现:

[snip]
exports.env = exports.jsdom.env = function() {
    [snip]
    window     = exports.html(html, null, options).createWindow(),
    features   = JSON.parse(JSON.stringify(window.document.implementation._features)),
    docsLoaded = 0,
    [snip]

似乎 .createWindow() 不成功......

我在Cloud9上运行它。

欢迎任何帮助。

4

3 回答 3

7

正如https://github.com/tmpvar/jsdom/issues/436所报告的,这可能是由于未安装 contextify 造成的。理论上 jsdom 有一个 shim 允许它在没有 contextify 的情况下工作,这就是为什么它将它列为可选而不是必需模块的原因,但是这个 shim 似乎被破坏了(参见https://github.com/tmpvar/jsdom/问题/456)。

因此,到目前为止,您需要安装 contextify 才能使用最新的 jsdom。根据您的操作系统和环境,有几个原因可能会导致问题。运行 npm install contextify 然后追踪该问题。

根据您的根本问题尝试的事情: - 验证您是否安装了 Python 2.7 或更高版本,并且最好安装了 2.7.3。还要验证它是在您键入 python --version 时运行的,并且您的 PYTHONPATH 是正确的。- sudo npm install contextify - npm 缓存清理;npm install contextify --force

于 2012-08-24T21:11:16.110 回答
0

我找到了问题的答案。

可以在http://support.cloud9ide.com/entries/21243717-accessing-your-private-running-project-via-javascript-or-curl上找到其中的一部分。

因此,为了使 jsdom 在 cloud9 上运行,需要使用旧版本(如 0.2.1)并使用旧版本的节点(如 0.4,cloud9 支持)运行脚本。

于 2012-04-24T13:37:48.950 回答
0

尝试升级 jsdom。我在旧版本的 jsdom (0.3.x) 上遇到了完全相同的错误。然后我删除了它并安装了当前的(jsdom@0.6.5)版本,现在它可以工作了。

于 2013-05-30T09:19:13.543 回答