无法评估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(); });