使用PhantomJS调用page.evaluate()
时,是否可以在嵌入式JavaScript文件中引用函数?如何从evaluate()访问注入的.js文件中的函数?
例如我想调用包含在文件my.js功能someFunctionInMyJs
:
var page = require('webpage').create();
page.injectJs('my.js')
page.open('http://...', function() {
var x = page.evaluate(function() {
var y = someFunctionInMyJs();
return y;
});
phantom.exit();
});
这是可能的/有没有其他办法?
my.js看起来是这样的:
function someFunctionInMyJs() {
return 'Hi there!';
}
,我得到的错误是:
ReferenceError: Can't find variable: someFunctionInMyJs
my.js在于在那里我调用PhantomJS的文件夹中。
你的例子my.js包含一个语法错误。请注册['onConsoleMessage'](http://phantomjs.org/api/webpage/handler/on-console-message.html)和['onError'](http://phantomjs.org/api/webpage /handler/on-error.html)事件。也许有错误。如果没有错误,你可以尝试显式地将函数定义为'window.someFunctionInMyJs = function(){...}'。 – 2014-10-02 07:22:39
@Artjom谢谢:我已经使用http://esprima.org/demo/validate.html修复了JS,但我仍然无法获得要识别的功能。你能否在答案中粘贴一个“窗口”的例子。下面的用法?我试过http://phantomjs.org/api/webpage/method/inject-js.html这个例子,但也有问题。我确信我在做一些愚蠢的事情。 – davek 2014-10-02 10:00:27