前阵子我在少数派看到了钟大写的 JSBox 介绍文章,才了解到钟大新写了一个 JSBox APP。 这让我想起了半年前 Pin 支持 JS 脚本时,我为了图新鲜写了一个 IP 地址获取脚本的事。 可惜当时 Pin 才刚刚支持 JS 脚本,有一些 UI 方面的 BUG,对我写的脚本并不是很友好。今天我从 Pin 交流群的群文件中下载了我以前写的脚本,发现勤劳的钟大将这些 BUG 都修复了。
JSBox 简介
我很懒,直接引用一下钟大对 JSBox 的介绍吧。 文章来源:少数派 - JSBox: 一个创造工具的工具 JSBox 是一个可以用来运行 JavaScript 脚本的 iOS 应用,你可以通过他来执行标准的 JavaScript 脚本。
这种执行不是指跑在浏览器上,而是执行在一个完全原生的环境,效率很高。
并且我们提供了很多 iOS 原生的接口,这意味着你可以通过他做很多事情,包括但不限于:
- 写一个用来查询汇率的脚本;
- 写一个用于计算小费的脚本;
- 通过接口实现一个小小的应用,提供丰富的界面;
- 写一个文本收藏工具,用于收藏常用的文字;
- 写一个下载 Twitter 视频的小工具; ……
其实 JSBox 是完完全全可编程的一个应用,他能做很多事情,所限制产出的往往只是动手能力。
为了更好的编写脚本,我们甚至提供了配套的 VSCode 插件,用于更高效率的编写和测试 JSBox 脚本,可以做的桌面端编写 iOS 端实时刷新。因为我们始终相信无论移动端的编辑器做的多么强大,编写代码的效率也始终被桌面端碾压。
所以,JSBox 并不是像 Pythonista 那样为了编写代码而生的应用,编写代码只是实现功能的手段,我们的一切最终都是为了效率的提高。
使用 JSBox 制作一个 IP 地址获取脚本
新建 JS 脚本,添加以下代码
function getip() {
var url = "ipip.net"
$ui.toast("正在获取 IP 地址:" + url)
$ui.loading(true)
$http.get({
url: "http://myip.ipip.net/",
header: {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
},
handler: function(resp) {
$ui.loading(false)
var data = resp.data
$ui.alert({
title: "IP 信息如下",
message: resp.data
})
}
})
}
getip()
然后直接运行就可以了 脚本下载地址:IP 地址获取.js
运行效果
代码解读
我不知道该不该写代码解读,看的懂代码的不需要,看不懂的。。尽量看注释部分理解吧
//定义 getip() 函数
function getip() {
//定义 url 为 ipip.net
var url = "ipip.net"
//调用 ui.toast 函数,显示获取状态。具体看作者开发文档
//后面使用到的函数和介绍我在代码后面已经列出来了
$ui.toast("正在获取 IP 地址:" + url)
//调用 ui.loading 函数,显示加载中。
$ui.loading(true)
//http 的 get 嘛,不多介绍了
$http.get({
//调用 ipip.net 的 api
url: "http://myip.ipip.net/",
//浏览器的 UA 模拟,这个很重要,不然没法获取返回参数的
header: {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" //模拟浏览器的 UA,这个很重要
},
//调出弹出串口函数
handler: function(resp) {
$ui.loading(false)
var data = resp.data
$ui.alert({
title: "IP 信息如下",
message: resp.data
})
}
})
}
//使用 getip() 函数,运行
getip()
调用的相关函数如下:
- $ui.toast(message) - 显示一个悬浮的提示信息,几秒后自动消失
- $ui.loading(boolean) - 在主界面显示一个正在加载的提示框
- $http.get(object) - 发起一个 GET 请求
- $ui.alert(object) - 给用户一个 alert 框,用于提示或者选择
JSBox 开发文档
后记
我文笔并不是很好,如果用 WordPress 博客程序写我估计会逻辑混乱,排版糟糕。 哪位巨巨指点一下让我写的更好,感激不尽啊。