2012-04-13 23 views
7

tôi đang cố gắng để có được jsdom làm việc :)Node.js jsdom lỗi

Dưới đây là các mã:

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'); 
     } 
    }); 
}); 

Và đây là lỗi:

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

Tôi đã kiểm tra nếu trang được tìm nạp và nếu jquery lib được phân tích cú pháp - chúng là.

Chúng ta có thể nhìn vào việc thực hiện các 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] 

Dường như .createWindow() không phải là thành công ...

Và tôi chạy nó trên Cloud9.

Mọi trợ giúp đều được chào đón.

+0

Phiên bản nào của nút và jsdom? Nó hoạt động ở đây với nút v0.6.16 và jsdom 0.2.14. (Bằng cách này, bạn có thể làm 'fs.readFileSync (đường dẫn, 'utf8')' thay vì lệnh 'toString()' (mà bạn cũng có thể nên chuyển ''utf8'')). –

+0

Phiên bản của nút là 0.6.8 và phiên bản của jsdom là 0.2.14. – kal3v

+0

nếu mã từ phía máy chủ tôi nghĩ "cửa sổ" chỉ từ phía trình duyệt – ZiTAL

Trả lời

7

Được báo cáo tại https://github.com/tmpvar/jsdom/issues/436, điều này có thể do bối cảnh không được cài đặt. Trong lý thuyết jsdom có ​​một shim cho phép nó hoạt động mà không có bối cảnh đó là lý do tại sao nó có nó được liệt kê như là một mô-đun tùy chọn thay vì yêu cầu, nhưng shim này dường như bị hỏng (xem https://github.com/tmpvar/jsdom/issues/456).

Vì vậy, ngay bây giờ, bạn cần cài đặt bối cảnh để sử dụng jsdom mới nhất. Tùy thuộc vào hệ điều hành và môi trường của bạn có một số lý do có thể là một vấn đề. Chạy npm install contextify và sau đó theo dõi vấn đề đó.

Những điều cần thử tùy thuộc vào vấn đề gốc của bạn là: - Xác minh bạn có Python 2.7 trở lên và được cài đặt 2.7.3 tối ưu. Cũng xác minh của nó một trong đó được chạy khi bạn gõ python --version và PYTHONPATH của bạn là chính xác. - sudo npm cài đặt contextify - bộ nhớ cache npm sạch; npm install contextify --force

+0

Cảm ơn bạn đã liên kết đến thảo luận vấn đề. Sau khi nhấn vấn đề này, tôi đang nghĩ đến việc chuyển sang Domino/Zepto Node, để tránh sự phụ thuộc vào Python. – Jonathan

+0

Tôi gặp vấn đề tương tự. cài đặt contextify và upgrade jsdom đã làm điều đó: 'sudo npm install contextify; npm ls; npm xóa jsdom; npm cài đặt [email protected]; npm cache clean' –

0

Thử nâng cấp jsdom. Tôi đã có lỗi chính xác với phiên bản cũ của jsdom (0.3.x). Sau đó, tôi gỡ bỏ nó và cài đặt phiên bản hiện tại ([email protected]) và bây giờ nó hoạt động.