【发布时间】:2018-04-06 12:52:48
【问题描述】:
我正在尝试通过 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 范围之外的函数或变量?
【问题讨论】:
标签: javascript scope phantomjs global globals