XWebHelper.ets 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import { router, WebHeader } from '@kit.ArkUI';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. import { LogHelper, SZYXLocalStorageHelper } from '../../../../Index';
  4. import { baseEncode } from '../util/base64Util';
  5. import { TitleBarBtn } from '../view/SafeView';
  6. import { ToolsHelper } from './ToolsHelper';
  7. import { XWebManager } from './XWebManager';
  8. const XWebview = import('../pages/XWebview');
  9. export interface XWebController {
  10. sendMessage: (message: string) => void
  11. getUrl: () => string
  12. refresh: () => void
  13. getTitle: () => string
  14. }
  15. export interface XWebJsController {
  16. sendMessage: (message: string) => void
  17. }
  18. export interface JsParams {
  19. obj: object;
  20. name: string;
  21. methodList: Array<string>;
  22. controller?: XWebJsController
  23. }
  24. export interface XWebParams {
  25. url?: string
  26. content?: string
  27. title?: string
  28. watermarkTxt?: string
  29. showMenu?: boolean
  30. jsParams?: JsParams
  31. closeTag?: string
  32. headers?: Array<WebHeader>
  33. onMessage?: (message: string) => void
  34. clickMenu?: TitleBarBtn
  35. controller?: XWebController
  36. zoomAccess?: boolean
  37. _uuid?: string
  38. _uuidToHtml?: string
  39. }
  40. export class XWebHelper {
  41. static close() {
  42. XWebManager.close()
  43. }
  44. private constructor() {
  45. }
  46. /**
  47. * 打开web页面,加载h5
  48. * @param params
  49. */
  50. public static openWeb(params: XWebParams): Promise<boolean> {
  51. if (params.onMessage) {
  52. params._uuid = XWebManager.addOnMessage(params.onMessage)
  53. }
  54. if (params.controller) {
  55. params._uuidToHtml = ToolsHelper.getUuid()
  56. params.controller.sendMessage = (msg) => {
  57. XWebManager.sendMessageToHtml(msg)
  58. }
  59. params.controller.getUrl = (): string => {
  60. return XWebManager.getUrl();
  61. }
  62. params.controller.getTitle = (): string => {
  63. return XWebManager.getTitle();
  64. }
  65. params.controller.refresh = () => {
  66. XWebManager.refresh()
  67. }
  68. }
  69. if (params.clickMenu){
  70. XWebManager.menuClick = params.clickMenu.onClick
  71. }
  72. if (params.jsParams && params.jsParams.obj) {
  73. if (!params._uuidToHtml) {
  74. params._uuidToHtml = ToolsHelper.getUuid()
  75. }
  76. XWebManager.objs.set(params._uuidToHtml, params.jsParams.obj)
  77. if (params.jsParams?.controller) {
  78. params.jsParams.controller.sendMessage = (msg) => {
  79. XWebManager.sendMessageToWeb(msg)
  80. }
  81. }
  82. }
  83. return new Promise((resolve) => {
  84. router.pushNamedRoute({
  85. name: 'XWebview',
  86. params: params
  87. }, router.RouterMode.Single).then(() => {
  88. // LogHelper.info('Succeeded in jumping to the XWebview page.')
  89. resolve(true)
  90. }).catch((err: BusinessError) => {
  91. resolve(false)
  92. LogHelper.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`)
  93. ToolsHelper.showMessage(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`)
  94. })
  95. })
  96. }
  97. public static refreshWeb() {
  98. SZYXLocalStorageHelper.storage.setOrCreate('refresh_web_base', new Date().getTime())
  99. }
  100. public static openPreview(params: XWebParams): Promise<boolean> {
  101. params.url =
  102. `https://mdtdemo.51trust.com/preview/onlinePreview?url=${baseEncode(params.url)}&watermarkTxt=${encodeURI(params.watermarkTxt ??
  103. '')}`
  104. return new Promise((resolve) => {
  105. router.pushNamedRoute({
  106. name: 'XWebview',
  107. params: params
  108. }, router.RouterMode.Single).then(() => {
  109. // LogHelper.info('Succeeded in jumping to the XWebview page.')
  110. resolve(true)
  111. }).catch((err: BusinessError) => {
  112. resolve(false)
  113. LogHelper.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`)
  114. ToolsHelper.showMessage(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`)
  115. })
  116. })
  117. }
  118. }