native-message.js 1.6 KB

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