B2B网络软件

标题: 苹果脚本示例Config配置H5集成 [打印本页]

作者: YYPOST群发软件    时间: 前天 07:52
标题: 苹果脚本示例Config配置H5集成
苹果脚本示例Config配置H5集成
  1. // 🍎交流QQ群:711841924(群)
  2. // 🍎交流QQ群:528816639  (苹果内测群)

  3. // ============================================
  4. // AIWROK Config 配置管理器 - H5集成示例
  5. // ============================================
  6. printl("====================================");
  7. printl("启动 AIWROK Config 配置管理器");
  8. printl("====================================");

  9. // ============================================
  10. // 配置文件路径管理
  11. // ============================================
  12. var resourcesPath = project.getResourcesPath();
  13. // 确保路径末尾只有一个斜杠,避免双斜杠问题
  14. if (resourcesPath.endsWith("/")) {
  15.     var CONFIG_FILE_PATH = resourcesPath + "config.json";
  16. } else {
  17.     var CONFIG_FILE_PATH = resourcesPath + "/config.json";
  18. }
  19. printl("配置文件路径: " + CONFIG_FILE_PATH);

  20. /**
  21. * 从文件加载配置
  22. * @returns {Object} 配置对象
  23. */
  24. function loadConfigFromFile() {
  25.     try {
  26.         if (typeof files !== 'undefined' && files.exists(CONFIG_FILE_PATH)) {
  27.             var content = files.read(CONFIG_FILE_PATH);
  28.             if (content) {
  29.                 var configs = JSON.parse(content);
  30.                 printl("✅ 从文件加载配置成功: " + Object.keys(configs).length + " 个配置项");
  31.                 return configs;
  32.             }
  33.         }
  34.     } catch (e) {
  35.         printl("⚠️ 加载配置文件失败: " + e.message);
  36.     }
  37.     return {};
  38. }

  39. /**
  40. * 保存配置到文件
  41. * @param {Object} configs - 配置对象
  42. * @returns {boolean} 是否成功
  43. */
  44. function saveConfigToFile(configs) {
  45.     try {
  46.         if (typeof files !== 'undefined') {
  47.             var content = JSON.stringify(configs, null, 2);
  48.             files.write(CONFIG_FILE_PATH, content);
  49.             printl("✅ 配置已保存到文件: " + CONFIG_FILE_PATH);
  50.             return true;
  51.         }
  52.     } catch (e) {
  53.         printl("⚠️ 保存配置文件失败: " + e.message);
  54.     }
  55.     return false;
  56. }

  57. // 启动时从文件加载配置
  58. var loadedConfigs = loadConfigFromFile();

  59. // 创建 WebView 实例
  60. var web = new WebView();

  61. // 显示 WebView 界面
  62. web.show();

  63. // 加载本地 HTML 文件
  64. var htmlPath = project.getCodePath() + "h5.html";
  65. web.loadFile(htmlPath);

  66. // 打印加载信息
  67. printl("WebView 已创建并加载:" + htmlPath);

  68. // 导入日志桥接器
  69. Import("LogBridge.js");

  70. // 初始化日志桥接(会阻塞等待 WebView 加载完成)
  71. LogManagerH5.init(web);

  72. // 延迟执行,确保 H5 页面完全加载
  73. _sleep(2000);

  74. // 发送测试日志到 H5 界面
  75. LogManagerH5.success("系统启动成功");
  76. LogManagerH5.info("WebView 已就绪");

  77. // ============================================
  78. // 注册 H5 与 Native 交互方法
  79. // ============================================
  80. printl("\n正在注册 H5 交互方法...");

  81. /**
  82. * 设置配置(供 H5 调用)
  83. * @param {string} key - 配置键
  84. * @param {string} value - 配置值
  85. * @returns {boolean} 是否成功
  86. */
  87. this.setConfig = function(key, value) {
  88.     try {
  89.         var fullKey = "AIWROK_" + key;
  90.         config.setConfig(fullKey, String(value));
  91.         printl("[H5→Native] 设置配置: " + fullKey + " = " + value);
  92.         LogManagerH5.success("✓ 配置已保存: " + key);
  93.         return true;
  94.     } catch (e) {
  95.         printl("[错误] 设置配置失败: " + e.message);
  96.         LogManagerH5.error("✗ 保存失败: " + e.message);
  97.         return false;
  98.     }
  99. };

  100. /**
  101. * 获取配置(供 H5 调用)
  102. * @param {string} key - 配置键
  103. * @returns {string} 配置值
  104. */
  105. this.getConfig = function(key) {
  106.     try {
  107.         var fullKey = "AIWROK_" + key;
  108.         var value = config.getConfig(fullKey, "");
  109.         printl("[H5→Native] 获取配置: " + fullKey + " = " + value);
  110.         return value;
  111.     } catch (e) {
  112.         printl("[错误] 获取配置失败: " + e.message);
  113.         return "";
  114.     }
  115. };

  116. /**
  117. * 批量保存配置(供 H5 调用)
  118. * @param {string} configsJson - JSON 字符串格式的配置对象
  119. * @returns {boolean} 是否成功
  120. */
  121. this.batchSetConfigs = function(configsJson) {
  122.     try {
  123.         var configs = JSON.parse(configsJson);
  124.         var count = 0;
  125.         for (var key in configs) {
  126.             config.setConfig("AIWROK_" + key, String(configs[key]));
  127.             count++;
  128.         }
  129.         printl("[H5→Native] 批量保存 " + count + " 个配置");
  130.         LogManagerH5.success("✓ 批量保存 " + count + " 个配置");
  131.         return true;
  132.     } catch (e) {
  133.         printl("[错误] 批量保存失败: " + e.message);
  134.         LogManagerH5.error("✗ 批量保存失败: " + e.message);
  135.         return false;
  136.     }
  137. };

  138. /**
  139. * 批量获取配置(供 H5 调用)
  140. * @param {string} keysJson - JSON 字符串格式的键数组
  141. * @returns {string} JSON 字符串格式的配置对象
  142. */
  143. this.batchGetConfigs = function(keysJson) {
  144.     try {
  145.         var keys = JSON.parse(keysJson);
  146.         var result = {};
  147.         for (var i = 0; i < keys.length; i++) {
  148.             var key = keys[i];
  149.             result[key] = config.getConfig("AIWROK_" + key, "");
  150.         }
  151.         printl("[H5→Native] 批量获取 " + keys.length + " 个配置");
  152.         return JSON.stringify(result);
  153.     } catch (e) {
  154.         printl("[错误] 批量获取失败: " + e.message);
  155.         return "{}";
  156.     }
  157. };

  158. /**
  159. * 导出所有配置(供 H5 调用)
  160. * @returns {string} JSON 字符串格式的所有配置
  161. */
  162. this.exportAllConfigs = function() {
  163.     try {
  164.         var allKeys = [
  165.             "game_name", "task_delay", "max_rounds", "enable_combat", "auto_heal",
  166.             "ocr_language", "ocr_confidence", "ocr_timeout", "ocr_retry",
  167.             "ui_theme", "ui_font_size", "ui_show_toolbar", "ui_animation",
  168.             "network_base_url", "network_version", "network_timeout", "network_retries"
  169.         ];
  170.         
  171.         var result = {};
  172.         for (var i = 0; i < allKeys.length; i++) {
  173.             var key = allKeys[i];
  174.             result[key] = config.getConfig("AIWROK_" + key, "");
  175.         }
  176.         
  177.         var jsonStr = JSON.stringify(result, null, 2);
  178.         printl("[H5→Native] 导出所有配置");
  179.         LogManagerH5.info("&#128228; 配置已导出");
  180.         return jsonStr;
  181.     } catch (e) {
  182.         printl("[错误] 导出配置失败: " + e.message);
  183.         LogManagerH5.error("✗ 导出失败: " + e.message);
  184.         return "{}";
  185.     }
  186. };

  187. /**
  188. * 恢复默认配置(供 H5 调用)
  189. * @param {string} category - 配置分类 (game/ocr/ui/network/all)
  190. * @returns {string} JSON 字符串格式的默认配置
  191. */
  192. this.resetToDefault = function(category) {
  193.     try {
  194.         var defaultConfigs = {};
  195.         
  196.         if (category === "game" || category === "all") {
  197.             defaultConfigs.game_name = "梦幻西游";
  198.             defaultConfigs.task_delay = "2000";
  199.             defaultConfigs.max_rounds = "10";
  200.             defaultConfigs.enable_combat = "true";
  201.             defaultConfigs.auto_heal = "true";
  202.         }
  203.         
  204.         if (category === "ocr" || category === "all") {
  205.             defaultConfigs.ocr_language = "zh-CN";
  206.             defaultConfigs.ocr_confidence = "80";
  207.             defaultConfigs.ocr_timeout = "5000";
  208.             defaultConfigs.ocr_retry = "3";
  209.         }
  210.         
  211.         if (category === "ui" || category === "all") {
  212.             defaultConfigs.ui_theme = "dark";
  213.             defaultConfigs.ui_font_size = "16";
  214.             defaultConfigs.ui_show_toolbar = "true";
  215.             defaultConfigs.ui_animation = "true";
  216.         }
  217.         
  218.         if (category === "network" || category === "all") {
  219.             defaultConfigs.network_base_url = "https://api.example.com";
  220.             defaultConfigs.network_version = "v2";
  221.             defaultConfigs.network_timeout = "10000";
  222.             defaultConfigs.network_retries = "3";
  223.         }
  224.         
  225.         // 保存到 config
  226.         for (var key in defaultConfigs) {
  227.             config.setConfig("AIWROK_" + key, defaultConfigs[key]);
  228.         }
  229.         
  230.         // 同时保存到文件
  231.         saveConfigToFile(defaultConfigs);
  232.         
  233.         printl("[H5→Native] 恢复默认配置: " + category);
  234.         LogManagerH5.warn("&#128465;️ 已恢复" + category + "默认配置");
  235.         return JSON.stringify(defaultConfigs);
  236.     } catch (e) {
  237.         printl("[错误] 恢复默认配置失败: " + e.message);
  238.         LogManagerH5.error("✗ 恢复失败: " + e.message);
  239.         return "{}";
  240.     }
  241. };

  242. /**
  243. * Toast 提示(供 H5 调用)
  244. * @param {string} message - 提示消息
  245. */
  246. this.showToast = function(message) {
  247.     printl("[H5→Native] Toast: " + message);
  248.     toast(message);
  249. };

  250. /**
  251. * 添加日志(供 H5 调用)
  252. * @param {string} message - 日志消息
  253. * @param {string} level - 日志级别
  254. */
  255. this.addNativeLog = function(message, level) {
  256.     printl("[H5 日志][" + level + "] " + message);
  257. };

  258. /**
  259. * 获取配置文件路径(供 H5 调用)
  260. * @returns {string} 配置文件路径
  261. */
  262. this.getConfigFilePath = function() {
  263.     return CONFIG_FILE_PATH;
  264. };

  265. /**
  266. * 从文件加载配置(供 H5 调用)
  267. * @returns {string} JSON 字符串格式的配置
  268. */
  269. this.loadConfigFromFile = function() {
  270.     try {
  271.         var configs = loadConfigFromFile();
  272.         // 同步到 config 系统
  273.         for (var key in configs) {
  274.             config.setConfig("AIWROK_" + key, configs[key]);
  275.         }
  276.         printl("[H5→Native] 从文件加载配置: " + Object.keys(configs).length + " 个配置项");
  277.         LogManagerH5.success("&#128194; 已从文件加载配置");
  278.         return JSON.stringify(configs);
  279.     } catch (e) {
  280.         printl("[错误] 从文件加载配置失败: " + e.message);
  281.         LogManagerH5.error("✗ 加载失败: " + e.message);
  282.         return "{}";
  283.     }
  284. };

  285. /**
  286. * 保存配置到文件(供 H5 调用)
  287. * @returns {boolean} 是否成功
  288. */
  289. this.saveConfigToFile = function() {
  290.     try {
  291.         // 从 config 系统获取所有配置
  292.         var allKeys = [
  293.             "game_name", "task_delay", "max_rounds", "enable_combat", "auto_heal"
  294.         ];
  295.         var configs = {};
  296.         for (var i = 0; i < allKeys.length; i++) {
  297.             var key = allKeys[i];
  298.             var value = config.getConfig("AIWROK_" + key, "");
  299.             if (value) {
  300.                 configs[key] = value;
  301.             }
  302.         }
  303.         
  304.         // 保存到文件
  305.         var success = saveConfigToFile(configs);
  306.         if (success) {
  307.             printl("[H5→Native] 配置已保存到文件: " + CONFIG_FILE_PATH);
  308.             LogManagerH5.success("&#128190; 配置已保存到文件");
  309.         }
  310.         return success;
  311.     } catch (e) {
  312.         printl("[错误] 保存到文件失败: " + e.message);
  313.         LogManagerH5.error("✗ 保存失败: " + e.message);
  314.         return false;
  315.     }
  316. };

  317. printl("✓ H5 交互方法注册完成");
  318. printl("  - this.setConfig");
  319. printl("  - this.getConfig");
  320. printl("  - this.batchSetConfigs");
  321. printl("  - this.batchGetConfigs");
  322. printl("  - this.exportAllConfigs");
  323. printl("  - this.resetToDefault");
  324. printl("  - this.showToast");
  325. printl("  - this.addNativeLog");
  326. printl("  - this.getConfigFilePath ⭐ 新增");
  327. printl("  - this.loadConfigFromFile ⭐ 新增");
  328. printl("  - this.saveConfigToFile ⭐ 新增");
  329. LogManagerH5.success("✓ Native 桥接方法已就绪");

  330. // ============================================
  331. // HID 滑动功能演示
  332. // ============================================
  333. printl("\n=== HID 滑动功能演示 ===");

  334. // 等待 H5 页面完全加载
  335. _sleep(2000);

  336. // 演示 HID 滑动 - 使用 hid.swip() 方法
  337. printl("\n&#128070; 演示 1: 向下滑动(查看底部内容)");
  338. try { toast("&#128070; 向下滑动..."); } catch(e) {}
  339. try {
  340.     // hid.swip(x1, y1, x2, y2, press, swipTime, delayUp)
  341.     // x1=540, y1=300 (起点)
  342.     // x2=540, y2=1200 (终点,向下)
  343.     // press=50 (按下等待50ms)
  344.     // swipTime=800 (滑动时长800ms)
  345.     // delayUp=100 (结束后延迟100ms抬起)
  346.     hid.swip(540, 300, 540, 1200, 50, 800, 100);
  347.     printl("✅ HID 向下滑动执行成功");
  348. } catch(e) {
  349.     printl("❌ HID 滑动失败: " + e.message);
  350. }

  351. _sleep(2500);
  352. printl("\n&#128070; 演示 2: 向上滑动(返回顶部)");
  353. try { toast("&#128070; 向上滑动..."); } catch(e) {}
  354. try {
  355.     // hid.swip(x1, y1, x2, y2, press, swipTime, delayUp)
  356.     // x1=540, y1=1200 (起点,底部)
  357.     // x2=540, y2=300 (终点,顶部,向上)
  358.     hid.swip(540, 1200, 540, 300, 50, 800, 100);
  359.     printl("✅ HID 向上滑动执行成功");
  360. } catch(e) {
  361.     printl("❌ HID 滑动失败: " + e.message);
  362. }

  363. _sleep(1500);
  364. printl("✓ HID 滑动演示完成");

  365. // ============================================
  366. // 演示:预设配置数据
  367. // ============================================
  368. _sleep(1000);

  369. printl("\n=== 预设配置数据 ===");
  370. try { toast("⚙️ 加载默认配置..."); } catch(e) {}
  371. setConfig("game_name", "梦幻西游");
  372. setConfig("task_delay", "2000");
  373. setConfig("max_rounds", "10");
  374. setConfig("enable_combat", "true");
  375. setConfig("auto_heal", "true");

  376. printl("✓ 预设配置完成");
  377. LogManagerH5.success("✓ 初始配置已加载");
  378. try { toast("✅ 配置加载完成"); } catch(e) {}

  379. printl("\n=== 配置管理器已就绪 ===");
  380. printl("✓ H5 界面可以进行可视化配置管理");
  381. printl("✓ 所有配置自动保存到 config 系统");
  382. printl("✓ 支持 HID 滑动、Toast 提示、CONFIG 操作");
  383. printl("\n提示:在 H5 界面中操作配置即可实时同步");

  384. // ============================================
  385. // Toast 演示
  386. // ============================================
  387. _sleep(2000);
  388. try { toast("&#127881; 欢迎使用 AIWROK 配置中心"); } catch(e) {}
  389. _sleep(1500);
  390. try { toast("&#128190; 点击按钮保存配置"); } catch(e) {}
  391. _sleep(1500);
  392. try { toast("&#128194; 点击按钮加载配置"); } catch(e) {}
  393. _sleep(1500);
  394. try { toast("&#128295; 测试 CONFIG 功能"); } catch(e) {}

  395. printl("\n✓ 所有演示完成,现在可以使用 H5 界面了");
复制代码







欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2