2012-04-13 14 views
7

私は:)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の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] 

.createWindowは()...

成功していないと私はCloud9上でそれを実行しているようです。

助けを歓迎します。

+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で報告されているように、これはインストールされていないコンテキストによって引き起こされる可能性があります。理論的には、jsdomにはシームがあり、必要なモジュールではなくオプションのモジュールとしてリストされているため、このシムは壊れているようです(https://github.com/tmpvar/jsdom/issues/456参照)。

今のところ、最新のjsdomを使用するには、contextifyをインストールする必要があります。お使いのOSや環境によっては、問題が発生するいくつかの理由があります。 npmを実行してcontextifyをインストールし、その問題を追跡します。

根本的な問題に応じて試してみるもの: - Python 2.7以上があり、最適に2.7.3がインストールされていることを確認してください。また、python --versionと入力したときに実行されるものと、PYTHONPATHが正しいことを確認してください。 - sudo npmはcontextifyをインストールします - npm cache clean; npm install contextify --force

+0

ありがとう問題のディスカッションへのリンク。この問題に遭った後、私はPythonの依存関係を避けるために、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])をインストールしました。