我正在尝试通过 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()
函数的上下文中是如何未知的。
我尝试了多种方法,例如在 Foo
定义下方执行 page.Foo2 = Foo;
,然后在 evaluate
中执行> 上下文我称之为 Foo2(2)
,但是没有。
或者 page.Foo2 = function(x) { return Foo(x) }
但同样无济于事。也不要通过调用 this.Foo2(2)
而只是调用 Foo2(2)
(如果这有意义的话)。
如何访问 page
范围之外的函数或变量?
最佳答案
您可以在沙箱上下文中声明一个函数:
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();
});
关于javascript - PhantomJS:如何访问全局函数和变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932306/