簡體   English   中英

PhantomJS:如何訪問全局函數和變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM