mock_flutter.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. (function (window) {
  2. 'use strict';
  3. // Local Logger for MockFlutter - always enabled
  4. const Logger = {
  5. log: function() {
  6. console.log.apply(console, arguments);
  7. },
  8. warn: function() {
  9. console.warn.apply(console, arguments);
  10. },
  11. error: function() {
  12. console.error.apply(console, arguments);
  13. },
  14. group: function() {
  15. console.group.apply(console, arguments);
  16. },
  17. groupEnd: function() {
  18. console.groupEnd.apply(console, arguments);
  19. }
  20. };
  21. Logger.log('%c [MockFlutter] 已加载,当前处于开发调试模式 ', 'background: #42b983; color: white; font-size: 14px; padding: 4px;');
  22. // 1. 模拟 uni.postMessage
  23. if (!window.uni) {
  24. window.uni = {};
  25. }
  26. window.uni.postMessage = function (message) {
  27. const payload = message.data || {};
  28. const action = payload.action;
  29. const data = payload.data;
  30. Logger.group('%c [MockFlutter] 收到 App 指令 ', 'color: #1aad19; font-weight: bold;');
  31. Logger.log('Action:', action);
  32. Logger.log('Data:', data);
  33. Logger.groupEnd();
  34. // 模拟具体行为反馈
  35. switch (action) {
  36. case 'openMap':
  37. alert(`[模拟App] 正在打开地图\n纬度: ${data.latitude}\n经度: ${data.longitude}\n名称: ${data.name}`);
  38. break;
  39. case 'openMatch':
  40. alert(`[模拟App] 正在打开赛事详情\nID: ${data.id}\n类型: ${data.type}`);
  41. break;
  42. case 'openActivityList':
  43. alert(`[模拟App] 正在打开活动列表\nID: ${data.id}\n名称: ${data.mapName}`);
  44. break;
  45. case 'back':
  46. Logger.log('[模拟App] 执行返回操作');
  47. // alert('[模拟App] 执行返回操作'); // 弹窗太多会烦,这里只打印
  48. break;
  49. case 'toHome':
  50. alert('[模拟App] 执行返回 App 首页');
  51. break;
  52. case 'toLogin':
  53. alert('[模拟App] 执行跳转登录页');
  54. break;
  55. case 'setTitle':
  56. alert(`[模拟App] 设置标题为: ${data.title}`);
  57. break;
  58. case 'shareWx':
  59. alert(`[模拟App] 正在调起微信分享\n标题: ${data.title}\n链接: ${data.url}`);
  60. break;
  61. case 'launchWxMini':
  62. alert(`[模拟App] 正在打开微信小程序\n原始ID: ${data.username}\n路径: ${data.path}`);
  63. break;
  64. case 'saveImage':
  65. alert(`[模拟App] 正在保存图片 (Base64长度: ${data.base64 ? data.base64.length : '0'})`);
  66. break;
  67. case 'getToken':
  68. Logger.log('[模拟App] 收到获取Token请求,1秒后模拟回调...');
  69. setTimeout(function() {
  70. if (window.Bridge && window.Bridge.receiveToken) {
  71. window.Bridge.receiveToken('MOCK_TOKEN_FOR_BRIDGE_12345');
  72. Logger.log('[模拟App] 已通过 Bridge.receiveToken 回调 Token');
  73. } else {
  74. Logger.warn('[模拟App] 无法回调 Token,Bridge.receiveToken 未定义');
  75. }
  76. }, 1000);
  77. break;
  78. // --- 新增 Mock 方法 ---
  79. case 'previewImage':
  80. alert(`[模拟App] 预览图片\n当前: ${data.current}\n列表: ${JSON.stringify(data.urls)}`);
  81. break;
  82. case 'makePhoneCall':
  83. alert(`[模拟App] 拨打电话: ${data.phoneNumber}`);
  84. break;
  85. case 'setClipboardData':
  86. alert(`[模拟App] 剪贴板内容已设置: ${data.data}`);
  87. break;
  88. case 'showToast':
  89. Logger.log(`[模拟App] ShowToast: ${data.title} (icon: ${data.icon})`);
  90. break;
  91. case 'showLoading':
  92. Logger.log(`[模拟App] ShowLoading: ${data.title}`);
  93. break;
  94. case 'hideLoading':
  95. Logger.log(`[模拟App] HideLoading`);
  96. break;
  97. case 'showModal':
  98. const confirmed = confirm(`[模拟App] Modal: ${data.title}\n${data.content || ''}`);
  99. Logger.log(`[模拟App] Modal result: ${confirmed ? 'Confirm' : 'Cancel'}`);
  100. break;
  101. default:
  102. Logger.log(`[模拟App] 收到未知指令: ${action}, 数据: `, data);
  103. // alert(`[模拟App] 收到未知指令: ${action}`);
  104. }
  105. };
  106. // 2. 模拟旧版注入对象 (防止报错,并使用可读中文)
  107. if (!window.share_wx) {
  108. window.share_wx = {
  109. postMessage: function(jsonStr) {
  110. Logger.log('[MockFlutter] share_wx.postMessage 收到:', jsonStr);
  111. alert('[模拟App/旧通道] 微信分享:\n' + jsonStr);
  112. }
  113. };
  114. }
  115. if (!window.wx_launch_mini) {
  116. window.wx_launch_mini = {
  117. postMessage: function(jsonStr) {
  118. Logger.log('[MockFlutter] wx_launch_mini.postMessage 收到:', jsonStr);
  119. alert('[模拟App/旧通道] 打开小程序:\n' + jsonStr);
  120. }
  121. };
  122. }
  123. if (!window.save_base64) {
  124. window.save_base64 = {
  125. postMessage: function(base64Str) {
  126. Logger.log('[MockFlutter] save_base64.postMessage 收到 (Base64长度):', base64Str ? base64Str.length : '0');
  127. alert(`[模拟App/旧通道] 保存图片 (Base64长度: ${base64Str ? base64Str.length : '0'})`);
  128. }
  129. };
  130. }
  131. // 3. 模拟 UserAgent (可选)
  132. // 某些逻辑可能会检查 navigator.userAgent,这里可以根据需要注入,但目前 SDK 不依赖这个判断
  133. })(window);