更新
This commit is contained in:
Generated
Vendored
+35
@@ -0,0 +1,35 @@
|
||||
<script>
|
||||
let firstBackTime = 0
|
||||
export default {
|
||||
onLaunch: function () {
|
||||
console.log('App Launch')
|
||||
},
|
||||
onShow: function () {
|
||||
console.log('App Show')
|
||||
},
|
||||
onHide: function () {
|
||||
console.log('App Hide')
|
||||
},
|
||||
// #ifdef APP-ANDROID
|
||||
onLastPageBackPress: function () {
|
||||
console.log('App LastPageBackPress')
|
||||
if (firstBackTime == 0) {
|
||||
uni.showToast({
|
||||
title: '再按一次退出应用',
|
||||
position: 'bottom',
|
||||
})
|
||||
firstBackTime = Date.now()
|
||||
setTimeout(() => {
|
||||
firstBackTime = 0
|
||||
}, 2000)
|
||||
} else if (Date.now() - firstBackTime < 2000) {
|
||||
firstBackTime = Date.now()
|
||||
uni.exit()
|
||||
}
|
||||
},
|
||||
// #endif
|
||||
onExit: function () {
|
||||
console.log('App Exit')
|
||||
},
|
||||
}
|
||||
</script>
|
||||
Generated
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
import App from './App.uvue'
|
||||
|
||||
import { createSSRApp } from 'vue'
|
||||
export function createApp() {
|
||||
const app = createSSRApp(App)
|
||||
return {
|
||||
app
|
||||
}
|
||||
}
|
||||
Generated
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name" : "NAME",
|
||||
"appid" : "APPID",
|
||||
"description" : "",
|
||||
"versionName" : "1.0.0",
|
||||
"versionCode" : "100",
|
||||
"uni-app-x" : {},
|
||||
"app" : {
|
||||
"defaultAppTheme": "auto"
|
||||
}
|
||||
}
|
||||
Generated
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"pages": [
|
||||
{
|
||||
"path": "pages/index/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "uni-app x"
|
||||
}
|
||||
}
|
||||
],
|
||||
"globalStyle": {
|
||||
"navigationStyle": "custom",
|
||||
"pageOrientation": "auto"
|
||||
}
|
||||
}
|
||||
Generated
Vendored
+124
@@ -0,0 +1,124 @@
|
||||
<template>
|
||||
<view style="flex: 1;">
|
||||
<!-- #ifdef APP-ANDROID -->
|
||||
<view :style="{ height: `${safeAreaTop}px` }"></view>
|
||||
<!-- #endif -->
|
||||
<web-view
|
||||
ref="webview"
|
||||
id="webview"
|
||||
style="flex: 1;"
|
||||
:webview-styles="webviewStyles"
|
||||
<!-- #ifdef APP-ANDROID -->
|
||||
android-layer-type="software"
|
||||
<!-- #endif -->
|
||||
:src="src"
|
||||
@message="message"
|
||||
@error="error"
|
||||
/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script lang='uts'>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
src: process.env.UNI_AUTOMATOR_APP_WEBVIEW_SRC,
|
||||
webviewElement: null as UniWebViewElement | null,
|
||||
webviewContext: null as WebviewContext | null,
|
||||
webviewStyles: {
|
||||
progress: false
|
||||
},
|
||||
safeAreaTop: 0
|
||||
}
|
||||
},
|
||||
onReady() {
|
||||
const windowInfo = uni.getWindowInfo()
|
||||
this.safeAreaTop = windowInfo.safeAreaInsets.top
|
||||
this.webviewElement = this.$refs['webview'] as UniWebViewElement
|
||||
this.webviewContext = uni.createWebviewContext('webview', this)
|
||||
},
|
||||
methods: {
|
||||
initAutomator() {
|
||||
const options = {
|
||||
wsEndpoint: process.env.UNI_AUTOMATOR_WS_ENDPOINT
|
||||
}
|
||||
this.webviewContext!.evalJS(`initRuntimeAutomator(${JSON.stringify(options)})`)
|
||||
console.log('initRuntimeAutomator...')
|
||||
},
|
||||
message(msg: UniWebViewMessageEvent) {
|
||||
// #ifdef APP-ANDROID
|
||||
// data 由 对象变更成数组
|
||||
const data = msg.detail.data[0];
|
||||
const id = data.get("id") as number
|
||||
const type = data.get("type") as string
|
||||
const dataObj = data.get("data") as UTSJSONObject
|
||||
const action = dataObj.getString("action")!
|
||||
const args = dataObj.get("args")
|
||||
// #endif
|
||||
// #ifdef WEB || MP || APP-IOS
|
||||
const data = msg.detail.data.length ? msg.detail.data[0].data : msg.detail.data
|
||||
const id = data["id"] as number
|
||||
const type = data["type"] as string
|
||||
const dataObj = data["data"]
|
||||
const action = dataObj["action"]!
|
||||
const args = dataObj["args"]
|
||||
// #endif
|
||||
// #ifdef APP-HARMONY
|
||||
const data = msg.detail.data[0];
|
||||
const id = data["id"] as number
|
||||
const type = data["type"] as string
|
||||
const dataObj = data["data"] as UTSJSONObject
|
||||
const action = dataObj["action"]!
|
||||
const args = dataObj["args"]
|
||||
// #endif
|
||||
if (type != 'automator') {
|
||||
return;
|
||||
}
|
||||
if (action == 'ready') {
|
||||
this.initAutomator()
|
||||
} else {
|
||||
console.log(id, action, args)
|
||||
if (action == 'captureScreenshot') {
|
||||
// 调用截图
|
||||
this.$viewToTempFilePath({
|
||||
id: 'webview',
|
||||
// #ifdef APP-ANDROID
|
||||
offsetY: `44`,
|
||||
// #endif
|
||||
// #ifndef APP-ANDROID
|
||||
offsetY: `${this.safeAreaTop + 44}`,
|
||||
// #endif
|
||||
overwrite: true,
|
||||
wholeContent: true,
|
||||
success: (res) => {
|
||||
const fileManager = uni.getFileSystemManager()
|
||||
fileManager.readFile({
|
||||
encoding: 'base64',
|
||||
filePath: res.tempFilePath,
|
||||
success: (readFileRes) => {
|
||||
this.callback(id, { data: readFileRes.data }, '')
|
||||
},
|
||||
fail: (error) => {
|
||||
this.callback(id, '', error.errMsg)
|
||||
},
|
||||
} as ReadFileOptions)
|
||||
|
||||
},
|
||||
fail: (res) => {
|
||||
this.callback(id, '', res.errMsg)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
error(event : WebViewErrorEvent) {
|
||||
console.log('webview load error', JSON.stringify(event.detail));
|
||||
},
|
||||
callback(id : number, res : any | null, error : string) {
|
||||
this.webviewContext!.evalJS(`onPostMessageFromUniXWebView(${id},${JSON.stringify(res)},${JSON.stringify(error)})`)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user