Index.ets 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import web_webview from '@ohos.web.webview';
  2. import process from '@ohos.process'
  3. import router from '@ohos.router';
  4. import uploadInstance from "../utils/UploadUtil"
  5. const TAG = "openHarmonyBridge" //webview和vue沟通的名称
  6. const webUrl = "http://10.88.11.200:11000"
  7. // const webUrl = "http://10.88.20.88:3005/"
  8. class BridgeModel {
  9. constructor() {
  10. }
  11. // this.controller.registerJavaScriptProxy 这个里面要对应
  12. download(params: string): void {
  13. // download(value: string, params: BridgeParams): string {
  14. // let downloadUrl: string = baseUrl + proxyPrefix + params.path
  15. // console.info(TAG, `download:`, downloadUrl);
  16. console.info(TAG, `params:`, params);
  17. // return true;
  18. }
  19. goToDevicePage(params: string): void {
  20. console.info(TAG, `goToDevicePage:`, params);
  21. uploadInstance.configUploadParam(params)
  22. router.pushUrl({ url: "pages/StationDevicesPage" })
  23. }
  24. selectFile(params: string): void {
  25. console.info(TAG, `selectFile:`, params);
  26. uploadInstance.configUploadParam(params)
  27. router.pushUrl({ url: "pages/SelectFilePage" })
  28. }
  29. startCamera(params: string): void {
  30. console.info(TAG, `startCamera:`, params);
  31. uploadInstance.configUploadParam(params)
  32. router.pushUrl({ url: "pages/CameraPage" })
  33. }
  34. }
  35. @Entry
  36. @Component
  37. struct Index {
  38. controller: web_webview.WebviewController = new web_webview.WebviewController();
  39. // 声明需要注册的对象
  40. @State bridgeObj: BridgeModel = new BridgeModel();
  41. hasRegistered: boolean = false
  42. registerJS = () => {
  43. // 这个必须要调用刷新才起作用, 而且只能执行一次
  44. if (!this.hasRegistered) {
  45. console.info(TAG, `registerJavaScriptProxy:`);
  46. this.controller.registerJavaScriptProxy(this.bridgeObj, TAG, ["download", "selectFile", "startCamera", "goToDevicePage"])
  47. this.controller.refresh()
  48. this.hasRegistered = true
  49. }
  50. }
  51. build() {
  52. Column() {
  53. Stack() {
  54. // 这个webview调用相机不知道为什么只能执行一次,选择文件的回到还行,但是为了统一写法还是用registerJavaScriptProxy,但是有时候注册的方法也只能执行一次,不知道为什么。
  55. // Web({ src: $rawfile('doc_old.html'), controller: this.controller })//测试官方文档 这个是好使的
  56. Web({
  57. src: "http://10.88.20.88:3005",
  58. controller: this.controller
  59. })// Web({
  60. // src: webUrl,
  61. // controller: this.controller
  62. // })
  63. .mixedMode(MixedMode.All)
  64. .onlineImageAccess(true)
  65. .javaScriptAccess(true)
  66. .overviewModeAccess(true)
  67. .databaseAccess(true)
  68. .domStorageAccess(true)
  69. .onShowFileSelector((event) => {
  70. console.log(TAG, "onShowFileSelector", JSON.stringify(event))
  71. // this.openGallery()
  72. // setTimeout(() => {
  73. // // 这个会触发addEventListener('change')的事件,但是每次的值都要不同。
  74. // event?.result.handleFileList([Date.now() + '.jpg']);
  75. // }, 1300)
  76. return true;
  77. })
  78. .onProgressChange((e) => {
  79. if (e && e.newProgress == 100) {
  80. this.registerJS()
  81. }
  82. })
  83. .onPermissionRequest((event) => {
  84. console.log(TAG, "onPermissionRequest")
  85. // event.request.grant([""])
  86. })
  87. // .onConsole((e) => {
  88. // console.log(TAG, "onConsole", JSON.stringify(e))
  89. // return true
  90. // })
  91. // 退出程序
  92. Row() {
  93. Image($r('app.media.shutdown'))
  94. .width(px2vp(80))
  95. .height(px2vp(80))
  96. .onClick(() => {
  97. let pro = new process.ProcessManager();
  98. pro.exit(0);
  99. })
  100. }.width(px2vp(1920))
  101. .height(px2vp(80))
  102. .justifyContent(FlexAlign.End)
  103. }.width(px2vp(1920))
  104. .height(px2vp(1080))
  105. .align(Alignment.BottomEnd)
  106. }
  107. .width(px2vp(1920))
  108. .height(px2vp(1080))
  109. }
  110. }