Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在PhantomJS中使用page.open之外的变量_Javascript_Phantomjs - Fatal编程技术网

Javascript 如何在PhantomJS中使用page.open之外的变量

Javascript 如何在PhantomJS中使用page.open之外的变量,javascript,phantomjs,Javascript,Phantomjs,我想做的是访问页面之外的一些变量。打开,但它似乎不起作用 让我们看一段代码: var page = require('webpage').create(); var url = 'http://www.bing.com'; var Tester; page.open(url, function(status) { var cont = page.content; var patt = /Bing/; Tester = patt.test(cont); con

我想做的是访问
页面之外的一些变量。打开
,但它似乎不起作用

让我们看一段代码:

var page = require('webpage').create();
var url = 'http://www.bing.com';

var Tester;

page.open(url, function(status) {
    var cont = page.content;
    var patt = /Bing/;
    Tester = patt.test(cont);

    console.log ("Inside " + Tester);

    phantom.exit();
});

console.log ("Outside " + Tester);
输出为:

Outside undefined Inside true 外部未定义 内在真实 我希望这两个值都是真的,顺序是先内后外。 发生了什么事


外部代码似乎在内部代码之前执行。

这是预期的行为,因为
page.open
是异步的。这意味着只要调用了
page.open
,它就会打开指定的URL。这需要一些时间,在加载页面和执行
页面.open
回调之前,将执行下一条语句(
console.log(“外部”+Tester);

这是异步函数的正常JavaScript行为。如果要在外部使用
Tester
,则需要让它等待一段时间,直到加载页面并执行回调

例如,静态超时为3秒,并希望在此时间内加载页面:

page.open(...);
setTimeout(function(){
    console.log ("Outside " + Tester);
}, 3000);
您可以增加超时时间,以确保安全

另一种可能是使用并明确等待
检测仪设置:

page.open(...);
waitFor(function testFx(){
    return Tester;
}, function onReady(){
    console.log ("Outside " + Tester);
}, 10000); // something big, if it's ready earlier, then it is executed earlier