mock_flutter.js 5.0 KB

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