Node.js jsdom错误
我正在试图让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的库parsing – 他们是。
我们可以看一下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上运行它。
任何帮助是受欢迎的。
正如https://github.com/tmpvar/jsdom/issues/436所报告的,这可能是由于未安装symxtify而导致的。 从理论上说,jsdom有一个垫片,它可以在没有任何争议的情况下工作,这就是为什么它被列为可选的而不是必需的模块,但是这个垫片似乎被破坏了(见https://github.com/tmpvar/jsdom/问题/ 456 )。
所以现在你需要安装使用最新版本的jsdom。 根据您的操作系统和环境,有几个原因可能是一个问题。 运行npm install contextify,然后追踪该问题。
要根据你的根本问题尝试的事情: – 确认你有Python 2.7或更高版本,最好安装2.7.3。 还要validation它是在你inputpython –version的时候运行的,而且你的PYTHONPATH是正确的。 – sudo npm install contextify – npm cache clean; npm安装contextify –force
我find了这个问题的答案。
因此,为了让jsdom在cloud9上工作,需要使用较旧的版本(如0.2.1),并使用较旧版本的节点(例如cloud9上支持的0.4)来运行脚本。
尝试升级jsdom。 我有一个老版本的jsdom(0.3.x)完全一样的错误。 然后我删除它,并安装了当前(jsdom@0.6.5)版本,现在它工作。