jsdom不处理网页内的脚本

我是nodejs的新手。 我想用jsdomparsing一些可能包含脚本代码的网页。 但我得到错误说,函数或variables没有定义。 任何人都可以提供一些方向

我的代码

var jsdom = require('jsdom'); jsdom.env({ html: 'http://10.200.0.10:8080/test/a.html', scripts: [ 'http://code.jquery.com/jquery-1.5.min.js' ], done: function(errors, window) { var $ = window.$; window.onload(); console.log(window.a); } }); 

和这里的html页面

 <html> <head> <script> var a = 0; function loads(){ a=1000; } </script> </head> <body onload='loads()'> </body> </html> 

并得到下面的错误信息

 dfddddfdf undefined:1: ReferenceError: loads is not defined loads() ^ ReferenceError: loads is not defined at unknown source at /root/node_modules/jsdom/node_modules/contextify/lib/contextify.js:10:24 at /root/node_modules/jsdom/lib/jsdom/level1/core.js:1024:50 at /root/testnode.js:18:12 at Array.0 (/root/node_modules/jsdom/lib/jsdom.js:199:39) at EventEmitter._tickCallback (node.js:192:40) node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ ReferenceError: loads is not defined at unknown source at /root/node_modules/jsdom/node_modules/contextify/lib/contextify.js:10:24 at /root/node_modules/jsdom/lib/jsdom/level1/core.js:1024:50 at /root/testnode.js:18:12 at Array.0 (/root/node_modules/jsdom/lib/jsdom.js:199:39) at EventEmitter._tickCallback (node.js:192:40) 

它报告加载函数没有定义,但实际上是在网页中声明的。

任何人都可以提出一些build议,或者只是简单地告诉我,jsdom不能处理页面中embedded的脚本。

这里是你想要的代码:

 var fs = require('fs'); var jsdom = require('jsdom'); var doc = jsdom.jsdom(fs.readFileSync("a.html"), null, { features: { FetchExternalResources : ['script'], ProcessExternalResources : ['script'], MutationEvents : '2.0', } }); var window = doc.createWindow(); jsdom.jQueryify(window, "http://code.jquery.com/jquery-1.5.min.js", function() { console.log(window.a); console.log(window.$().jquery); //jquery version }); 

你的代码不会工作,因为jsdom.env方法不处理脚本。

请注意,你应该使用一个很棒的npm库请求

尝试这个:

 var http = require('http'), jsdom = require('jsdom'), request = require('request'); var server = http.createServer(function (request, response) { getPage("http://isohunt.com/torrents/?iht=-1&ihq=life+is+beautiful", function (body) { jsdom.env({ html: body, scripts: ['http://code.jquery.com/jquery-1.6.min.js'] }, function(err, window){ var $ = window.jQuery; //your code goes here }); }) }); server.listen(3000); function getPage(someUri, callback) { request({uri : someUri}, function (error, response, body) { callback(body); }); }