REPL
从1.5版本开始,Phantomjs将提供交互解释器,也称为REPL:Read-Eval-Print Loop。 (本人觉得不用太理会REPL的中文翻译,直接就是REPL)
什么是REPL?
有时您急需通过一小段Javascript代码来测试x
或y
是如何运作的,
通常你会打开Firebug中的Javascript控制台,Webkit Inspector,
Opera Dragonfly或Chrome DevTools,
然后输入测试代码。现在,新增了一个REPL后您可以从PhantomJS中执行相同的操作了。
如何使用
如前所述,REPL代表READ-EVAL-PRINT循环:每输入一行命令并回车,此时命令立即被发送到解释器中解释(EVAL)并通过屏幕反馈结果。
从1.5版本开始,如果您不提供任何参数,则PhantomJS会启动新的默认模式。
解释得再多也不如用一个例子说明:
$ phantomjs⏎
phantomjs> phantom.version⏎
{
"major": 1,
"minor": 5,
"patch": 0
}
phantomjs> console.log("phantom is awesome")⏎
phantom is awesome
undefined
phantomjs> window.navigator⏎
{
"cookieEnabled": true,
"language": "en-GB",
"productSub": "20030107",
"product": "Gecko",
"appCodeName": "Mozilla",
"mimeTypes": {
"length": 0
},
"vendorSub": "",
"vendor": "Apple Computer, Inc.",
"platform": "MacIntel",
"appName": "Netscape",
"appVersion": "5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.6.0 (development) Safari/534.34",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.6.0 (development) Safari/534.34",
"plugins": {
"length": 0
},
"onLine": false
}
每个命令都在spot上进行评估,然后打印实际的返回值。
想要退出吗? 常用方式: 命令行输入phantom.exit()
或按键CTRL + C或CTRL +D 。
自动补全
我们看到的其中一个特性可以带来很多价值的自动完成。有时,人们喜欢的文档,如果他们能得到方法或属性的一个列表只是利用选项卡(即→|)它可以让所有的区别:
这是一个可以给我们带来巨大价值的特性:有时,就想大家喜欢文档一样,只需要按下Tab键(i.e. →|
)就可以得到他们想要的属性或方法:
phantomjs> phantom.→|
phantomjs> phantom.injectJs→|
phantomjs> phantom.exit→|
phantomjs> phantom.version→|
phantomjs> phantom.outputEncoding⏎
"UTF-8"
phantomjs>
所以,当你有时候只记得某个方法或属性是以某个字母开头的,但无法记得全部,这时候你只需输入你记得的前面几个字符,然后按下Tab键,REPL就会把所有以该字符开头的属性或方法一次展现出来,你找到你需要的即可。
历史命令
毫无疑问,REPL既然被大家所接受,那么它就要有支持历史命令的特性:只需按UP
键或DOWN
就可以查询前后使用过的执行命令。
历史文件保存在:
QDesktopServices::DataLocation + "/phantom_repl_history"
DataLocation是由Qt定义的,它依赖于操作系统。例如,在Mac上, 它可能位于:
"~/Library/Application Support/Ofi Labs/PhantomJS/phantom_repl_history"
它没有bug了吗?
不, 这是一个构建了JavaScript各种操作的新功能: 肯定会存在一些问题,但是我们时刻跟踪问题 (也喜欢广大开发者给我们提供bug信息).