[英]PhantomJS: How to access global functions and variables?
我試圖通過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();
});
請注意,在頁面的evaluate()
函數的上下文中如何知道Foo()
evaluate()
函數。
我嘗試了許多方法,例如執行page.Foo2 = Foo;
在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();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.