我正在尝试通过PhantomJS运行.js并在页面上下文中使用一些全局函数或变量。
这是一个最小的例子:
var page = require('webpage').create(); // or: var page = new WebPage();
// reroute page's console to global console
page.onConsoleMessage = function(msg) { console.log(msg) }
function Foo(x) { return "bar"+x }
page.open( 'https://www.example.com/', function(){
console.log(Foo(1)); // works OK
page.evaluate( function(){
console.log('test'); // works OK (message appears because we rerouted
// the page's console to global console output)
console.log(Foo(2)); // does NOT work, Foo is unknown
});
console.log(Foo(3)); // works OK
phantom.exit();
});
请注意在Foo()
函数的上下文中如何知道evaluate()
函数。
我尝试了很多方法,例如在page.Foo2 = Foo;
的定义下面Foo
,然后在evaluate
上下文中我调用Foo2(2)
,但不是。 / p>
或page.Foo2 = function(x) { return Foo(x) }
但是再次无济于事。也不是通过调用this.Foo2(2)
而不仅仅是Foo2(2)
(如果这有意义的话)。
如何访问page
范围之外的函数或变量?
答案 0 :(得分:0)
您可以在沙箱上下文中声明一个函数:
page.open( 'https://www.example.com/', function(){
page.evaluate( function(){
function Foo(x) { return "bar"+x }
console.log(Foo(2));
});
phantom.exit();
});
或者,如果您还需要在全局环境中使用它,可以将其发送到沙箱中:
function Foo(x) { return "bar"+x }
page.open( 'https://www.example.com/', function(){
console.log(Foo(1));
page.evaluate( function(Foo){
console.log(Foo(2));
}, Foo);
console.log(Foo(3));
phantom.exit();
});