如何在PhantomJS中使用page.open之外的变量
How to use variables outside page.open in PhantomJS
我想做的是访问page.open
之外的一些变量,但它似乎不起作用。
让我们看看这段代码:
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);
输出为:
外部未定义内部真实
我希望这两个值都是真的,并且顺序是Inside first和Outside after。发生了什么事?
外部代码似乎是在内部代码之前执行的。
这是预期行为,因为page.open
是异步的。这意味着一旦调用page.open
,它就会打开指定的URL。这将需要一些时间,并且在加载页面和执行page.open
回调之前执行下一条语句(console.log ("Outside " + Tester);
)。
这是具有异步函数的正常JavaScript行为。如果您想在外部使用Tester
,您需要让它等待一段时间,直到页面加载并执行回调。
例如,像这样的静态超时为3秒,并希望页面在该时间内加载:
page.open(...);
setTimeout(function(){
console.log ("Outside " + Tester);
}, 3000);
你可以增加超时时间,这样你就安全了。
另一种可能性是使用示例中的waitFor
,并明确等待设置Tester
:
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
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 为什么window.open不打开一个以变量形式给出的链接
- 在page.open()-PhantomJS中无法访问全局变量
- 通过open.window传递php变量
- 通过Ajaxrequest.open从Javascript获取变量到PHP文件
- xml使用xmlHttp.open处理多个变量
- 使用 window.open 将变量传递给新的 HTML
- window.open()在JSP中传递变量时不起作用
- 如何在PhantomJS中使用page.open之外的变量
- 使用XSLT在window.open-js中传递变量
- 变量= windows.open()对表单输入的变化起作用
- Chrome:通过window.open传递JavaScript变量
- 在onclick window.open中插入一个javascript变量
- 在window.open中传递带有自屏幕的变量
- 将变量传递给window.open