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