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 - они есть.

Мы могли бы посмотреть на реализацию 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.

Любая помощь приветствуется.

3 ответа

Решение

Я нашел ответ на вопрос.

Часть этого может быть найдена на http://support.cloud9ide.com/entries/21243717-accessing-your-private-running-project-via-javascript-or-curl.

Итак, чтобы заставить jsdom работать в облаке 9, нужно использовать более старую версию (например, 0.2.1) и запустить скрипт с более старой версией узла (например, 0.4, которая поддерживается в облаке 9).

Как сообщается на https://github.com/tmpvar/jsdom/issues/436, это может быть вызвано тем, что contextify не установлен. В теории у jsdom есть прокладка, которая позволяет ему работать без контекста, поэтому он указан как необязательный, а не обязательный модуль, но эта оболочка, похоже, не работает (см. https://github.com/tmpvar/jsdom/issues/456).

Так что на данный момент вам нужно установить contextify, чтобы использовать последнюю версию jsdom. В зависимости от вашей ОС и среды существует несколько причин, которые могут быть проблемой. Запустите npm install contextify, а затем отследите эту проблему.

Вещи, которые нужно попробовать, в зависимости от того, что является вашей корневой проблемой: - Убедитесь, что у вас установлен Python 2.7 или выше и оптимально установлен 2.7.3. Также убедитесь, что он запускается при вводе python --version и что ваш PYTHONPATH верен. - sudo npm install contextify - очистка кеша npm; npm install contextify --force

Попробуйте обновить JSDOM. У меня была точно такая же ошибка со старой версией jsdom (0.3.x). Затем я удалил его и установил текущую (jsdom@0.6.5) версию, и теперь она работает.

Другие вопросы по тегам