Node.js jsdom错误

kal*_*l3v 7 javascript node.js cloud9-ide jsdom contextify

我想让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');
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

这是错误:

jsdom.js:171
    features   = JSON.parse(JSON.stringify(window.document.implementation._fea
                                                          ^
TypeError: Cannot read property 'implementation' of undefined
Run Code Online (Sandbox Code Playgroud)

我已经检查了是否提取了页面以及是否解析了jquery lib - 它们是.

我们可以看一下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]
Run Code Online (Sandbox Code Playgroud)

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

我在Cloud9上运行它.

欢迎任何帮助.

stu*_*eek 7

https://github.com/tmpvar/jsdom/issues/436所述,这可能是由于没有安装contextify引起的.理论上jsdom有一个垫片,允许它在没有上下文的情况下工作,这就是为什么它被列为可选而不是必需的模块,但是这个垫片似乎被破坏了(参见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 cache clean; npm install contextify --force


kal*_*l3v 0

我找到了问题的答案。

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

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