mock_flutter.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. default:
  61. console.log(`[模拟App] 收到未知指令: ${action}, 数据: `, data);
  62. // alert(`[模拟App] 收到未知指令: ${action}`);
  63. }
  64. };
  65. // 2. 模拟旧版注入对象 (防止报错,并使用可读中文)
  66. if (!window.share_wx) {
  67. window.share_wx = {
  68. postMessage: function(jsonStr) {
  69. console.log('[MockFlutter] share_wx.postMessage 收到:', jsonStr);
  70. alert('[模拟App/旧通道] 微信分享:\n' + jsonStr);
  71. }
  72. };
  73. }
  74. if (!window.wx_launch_mini) {
  75. window.wx_launch_mini = {
  76. postMessage: function(jsonStr) {
  77. console.log('[MockFlutter] wx_launch_mini.postMessage 收到:', jsonStr);
  78. alert('[模拟App/旧通道] 打开小程序:\n' + jsonStr);
  79. }
  80. };
  81. }
  82. if (!window.save_base64) {
  83. window.save_base64 = {
  84. postMessage: function(base64Str) {
  85. console.log('[MockFlutter] save_base64.postMessage 收到 (Base64长度):', base64Str ? base64Str.length : '0');
  86. alert(`[模拟App/旧通道] 保存图片 (Base64长度: ${base64Str ? base64Str.length : '0'})`);
  87. }
  88. };
  89. }
  90. // 3. 模拟 UserAgent (可选)
  91. // 某些逻辑可能会检查 navigator.userAgent,这里可以根据需要注入,但目前 SDK 不依赖这个判断
  92. })(window);