native-message.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { browser, getRandomKey } from '../common/common'
  2. /**
  3. *
  4. * 目前已支持API
  5. *
  6. * openWebView
  7. *
  8. */
  9. const loop = () => {}
  10. const calls = {}
  11. const browserInfo = browser()
  12. if (browserInfo.isApp) {
  13. window.addEventListener('message', evt => {
  14. try {
  15. const data = evt.data ? typeof evt.data === 'object' ? evt.data : JSON.parse(evt.data) : {}
  16. const uuid = data.content.uuid || data.uuid
  17. try {
  18. if (data.content) {
  19. data.content = JSON.parse(data.content)
  20. }
  21. } catch (error) {}
  22. if (!uuid) {
  23. const keys = Object.keys(calls).filter(key => key.indexOf(data.api) === 0)
  24. for (const key of keys) {
  25. const callback = calls[key] || loop
  26. callback(data)
  27. }
  28. return
  29. }
  30. const callback = calls[data.content.uuid || data.uuid || (data.api + data.uuid)] || loop
  31. callback(data)
  32. } catch (error) {
  33. console.error('通信消息解析错误', error)
  34. }
  35. })
  36. }
  37. const instance = window.DAYA || (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.DAYA)
  38. export const postMessage = (data, callback) => {
  39. if (browserInfo.isApp) {
  40. const uuid = getRandomKey()
  41. calls[uuid] = callback || loop
  42. data.content = data.content ? {...data.content, uuid} : {uuid}
  43. instance.postMessage(JSON.stringify(data))
  44. }
  45. }
  46. export const listenerMessage = (api, callback) => {
  47. if (browserInfo.isApp) {
  48. const uuid = api + getRandomKey()
  49. calls[uuid] = callback || loop
  50. }
  51. }