2012-04-13 4 views
7

내가 jsdom가 작동 :) 여기Node.js를 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 라이브러리가 파싱되면 - 그것들이있다. ...

[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에 그것을 실행하고 있습니다 :

우리는 jsdom.js의 구현을 볼 수 있었다.

어떤 도움을 환영합니다.

+0

node 및 jsdom의 어떤 버전입니까? 여기 노드 v0.6.16 및 jsdom 0.2.14에서 작동합니다. (그런데'toString()'호출 대신에'fs.readFileSync (path, 'utf8')'를 할 수 있습니다 ('utf8 '을 넘겨 주어야 할 수도 있습니다)). –

+0

노드의 버전은 0.6.8이고 jsdom의 버전은 0.2.14입니다. – kal3v

+0

코드가 서버 측에서 오는 경우 "창"이 브라우저 측에서만 발생한다고 생각하십시오 – ZiTAL

답변

7

https://github.com/tmpvar/jsdom/issues/436에보고 된 바와 같이 이것은 설치되지 않은 contextify로 인해 발생할 수 있습니다. 이론적으로 jsdom은 필요한 모듈이 아닌 필수 모듈로 나열되어있는 상황화가 없어도 작동 할 수있는 심을 가지고 있지만이 심이 손상된 것 같습니다 (https://github.com/tmpvar/jsdom/issues/456 참조).

지금 당장 최신 jsdom을 사용하려면 contextify를 설치해야합니다. OS 및 환경에 따라 문제가 될 수있는 몇 가지 이유가 있습니다. npm을 실행하여 contextify를 설치 한 다음 해당 문제를 추적하십시오.

근본적인 문제에 따라 시도 할 사항 : - Python 2.7 이상이 있고 최적으로 2.7.3이 설치되어 있는지 확인하십시오. 또한 python --version을 입력 할 때 실행되는 PYTHONPATH가 올바른지 확인하십시오. - sudo npm 설치 컨텍스트 화 - npm cache clean; npm install contextify --force

+0

고마워요. 이슈 토론에 대한 링크. 이 문제를 겪은 후 파이썬 종속성을 피하기 위해 Domino/Zepto Node로 전환 할 생각입니다. – Jonathan

+0

나는 똑같은 문제가 있었다. contextify를 설치하고 jsdom을 업그레이드하면 다음과 같이됩니다 :'sudo npm install contextify; npm ls; npm은 jsdom을 제거합니다. npm install [email protected]; 캐시 클린 npm –

0

jsdom을 업그레이드 해보십시오. 이전 버전의 jsdom (0.3.x)과 정확히 같은 오류가있었습니다. 그렇다면 그것을 제거하고 현재 ([email protected]) 버전을 설치하고 지금은 작동합니다.