使用 PhantomJS 调用 page.evaluate()
时是否可以引用嵌入式 JavaScript 文件中的函数?
例如我想调用 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 的文件夹中。
最佳答案
问题是您将一个脚本注入(inject)到页面中,此时该脚本为 about:blank ,然后打开您想要的页面。您需要将脚本注入(inject)到 page.open
回调中。每次导航到另一个页面时都必须执行此操作。
page.open('http://...', function() {
page.injectJs('my.js')
var x = page.evaluate(function() {
var y = someFunctionInMyJs();
return y;
});
phantom.exit();
});
您还可以尝试通过 page.onInitialized
注入(inject) (injectJs
) 您的脚本处理程序,例如,如果您的脚本交换 XMLHttpRequest 的实现。
如果这仍然不起作用,则您的函数可能不是全局的,在这种情况下您必须将其设为全局函数。编辑 my.js 将您的函数定义为
window.someFunctionInMyJs = function() {
return 'Hi there!';
};
关于javascript - 如何从evaluate()访问注入(inject)的.js文件中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26146448/