2012-04-17 11 views
5

मैं नोडजेज़ में नया हूं। मैं कुछ वेब पृष्ठों को पार्स करने के लिए jsdom का उपयोग करना चाहता हूं जिसमें स्क्रिप्ट कोड हो सकता है। लेकिन मुझे त्रुटि मिली कि समारोह या चर परिभाषित नहीं किया गया था। क्या कोई इस बारे में कुछ निर्देश दे सकता है।jsdom वेब पेज के अंदर स्क्रिप्ट को संसाधित नहीं करता

मेरी कोड

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) 

यह भार समारोह की रिपोर्ट मिल गया त्रुटि संदेश परिभाषित नहीं किया गया था, लेकिन यह वास्तव में था वेब पेज में घोषित

क्या कोई भी कुछ सुझाव दे सकता है, या बस मुझे बताएं कि पेज में एम्बेडेड स्क्रिप्ट को संसाधित नहीं कर सकता है।

उत्तर

10

यहाँ कोड है कि आप करना चाहते हैं क्या है: क्योंकि jsdom.env विधि स्क्रिप्ट पर कार्रवाई नहीं करता है

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

आपका कोड काम नहीं करेगा।

+0

धन्यवाद एक बहुत Mihai, यह ठीक काम करता है। – user966085

0

कृपया ध्यान दें कि आप एक भयानक NPM पुस्तकालय request

का उपयोग करना चाहिए इस प्रयास करें:

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); 
    }); 
} 
+0

हाँ, मैं इसका उपयोग कर रहा हूं :-) – user966085

संबंधित मुद्दे