无法评估phantomjs中的jquery函数

我想构建一个phantomjs代理服务,它嵌入了jquery并接受url和javascript代码。

我写了一个很好的例子:

var webPage = require('webpage'); var page = webPage.create(); page.onInitialized = function() { page.injectJs('js_lib/jquery.min.js'); // page.includeJs('http://cdn.bootcss.com/jquery/2.1.4/jquery.min.js'); console.log('running document-start script.'); }; page.open("http://example.com", function(status) { if ( status === "success" ) { // var title = page.evaluateJavaScript('$(title).text()'); var title = page.evaluate(function() { return $("title").text(); }); console.log(title); } phantom.exit(); }); 

为了实现我的目的,需要使用page.evaluateJavaScript('$("title").text()'); 因为我想将{'url':somesite.com, 'js':'$("title").text()'}传递给此服务。

然后我将代码切换到page.evaluateJavaScript

 page.open("http://example.com", function(status) { if ( status === "success" ) { var title = page.evaluateJavaScript('$("title").text()'); console.log(title); } phantom.exit(); }); 

拿到:

 $ phantomjs test.js running document-start script. ReferenceError: Can't find variable: title phantomjs://webpage.evaluate():1 in global code :0 in evaluateJavaScript test.js:20 :285 in _onPageOpenFinished null 

我解决了!

不要写为page.evaluateJavaScript('$(title).text()');

需要使用function {}来包装代码。

 var webPage = require('webpage'); var page = webPage.create(); page.onInitialized = function() { page.injectJs('js_lib/jquery.min.js'); // page.includeJs('http://cdn.bootcss.com/jquery/2.1.4/jquery.min.js'); console.log('running document-start script.'); }; page.open("http://example.com", function(status) { if ( status === "success" ) { var title = page.evaluateJavaScript('function() { return $("title").text();}'); console.log(title); } phantom.exit(); });