| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- interface HTML5 extends Window {
- plus?: any; // eslint-disable-line
- }
- export default new (class {
- private h5 = new Promise<HTML5>((resolve) => {
- document.addEventListener('plusready', () => {
- resolve(window);
- })
- })
- constructor() {
- // 监听返回按钮事件
- this.onPlusReady((plus) => {
- let firstBack = true;
- const webview = plus.webview.currentWebview();
- plus.key.addEventListener('backbutton', () => {
- // eslint-disable-next-line
- webview.canBack((e: any) => {
- // 判断能否继续返回
- if (e.canBack) {
- webview.back();
- } else {
- // 1秒内连续两次按返回键退出应用
- if (firstBack) {
- firstBack = false;
- plus.nativeUI.toast('再按一次退出应用');
- setTimeout(() => {
- firstBack = true;
- }, 1000);
- } else {
- plus.runtime.quit();
- }
- }
- })
- })
- })
- }
- // eslint-disable-next-line
- onPlusReady(callback: (plus: any) => void) {
- this.h5.then((res) => {
- callback(res.plus)
- })
- }
- /**
- * 客户端的版本名称
- * @returns
- */
- getVersion() {
- return new Promise<string>((resolve) => {
- this.onPlusReady((plus) => {
- resolve(plus.runtime.version)
- })
- })
- }
- /**
- * 获取客户端的版本号
- * @returns
- */
- getVersionCode() {
- return new Promise<string>((resolve) => {
- this.onPlusReady((plus) => {
- const versionCode = plus.runtime.versionCode
- console.log('版本号', versionCode)
- resolve(versionCode)
- })
- })
- }
- /**
- * 获取状态栏高度
- * @param callback
- */
- getStatusBarHeight(callback: (statusbarHeight: number) => void) {
- this.onPlusReady((plus) => {
- const height = plus.navigator.getStatusbarHeight();
- callback(height);
- })
- }
- /**
- * 设置状态栏文字颜色
- * @param color dark - 暗色,light - 亮色
- */
- setStatusBarStyle(color: 'dark' | 'light') {
- this.onPlusReady((plus) => {
- plus.navigator.setStatusBarStyle(color);
- })
- }
- /**
- * 隐藏状态栏
- */
- hideStatusBar() {
- this.onPlusReady((plus) => {
- plus.navigator.setFullscreen(true);
- })
- }
- /**
- * 显示状态栏
- */
- showStatusBar() {
- this.onPlusReady((plus) => {
- plus.navigator.setFullscreen(false);
- })
- }
- /**
- * 设置应用全屏
- */
- setFullSreen() {
- this.onPlusReady((plus) => {
- this.hideStatusBar();
- plus.navigator.hideSystemNavigation();
- })
- }
- /**
- * 应用退出全屏
- */
- exitFullSreen() {
- this.onPlusReady((plus) => {
- this.showStatusBar();
- plus.navigator.showSystemNavigation();
- })
- }
- /**
- * 更新应用
- * @param url
- */
- updateApp(url: string) {
- this.onPlusReady((plus) => {
- const dtask = plus.downloader.createDownload(
- url,
- {
- filename: ''
- },
- function (d: any, status: number) {
- if (status == 200) {
- // 当前下载的状态
- installApp(d.filename) // 调用安装的方法
- } else {
- //plus.nativeUI.alert('下载失败')
- }
- }
- )
- dtask.start() // 开启下载的任务
- // app自动更新进度
- dtask.addEventListener('statechanged', function (task: any, status: number) {
- // 给下载任务设置一个监听 并根据状态 做操作
- switch (task.state) {
- case 1:
- console.log('正在下载')
- break
- case 2:
- console.log('已连接到服务器')
- break
- case 3:
- // console.log(task)
- // console.log(task.downloadedSize)//当前的大
- // console.log(task.totalSize)//安装包的大小
- }
- })
- // 自动更新
- // eslint-disable-next-line no-inner-declarations
- function installApp(path: string) {
- plus.nativeUI.showWaiting('正在更新...')
- plus.runtime.install(
- path,
- {
- // true表示强制安装,不进行版本号的校验;false则需要版本号校验,如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败。 仅安装wgt和wgtu时生效,默认值 false
- force: false
- },
- function () {
- plus.nativeUI.closeWaiting()
- console.log('更新成功!')
- plus.runtime.restart()
- },
- function (e: any) {
- plus.nativeUI.closeWaiting()
- plus.nativeUI.alert('更新失败:' + e.message)
- }
- )
- }
- })
- }
- })
|