YYPOST群发软件 发表于 2026-4-17 07:52:12

苹果脚本示例Config配置H5集成

苹果脚本示例Config配置H5集成
// 🍎交流QQ群:711841924(群)
// 🍎交流QQ群:528816639(苹果内测群)

// ============================================
// AIWROK Config 配置管理器 - H5集成示例
// ============================================
printl("====================================");
printl("启动 AIWROK Config 配置管理器");
printl("====================================");

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

/**
* 从文件加载配置
* @returns {Object} 配置对象
*/
function loadConfigFromFile() {
    try {
      if (typeof files !== 'undefined' && files.exists(CONFIG_FILE_PATH)) {
            var content = files.read(CONFIG_FILE_PATH);
            if (content) {
                var configs = JSON.parse(content);
                printl("✅ 从文件加载配置成功: " + Object.keys(configs).length + " 个配置项");
                return configs;
            }
      }
    } catch (e) {
      printl("⚠️ 加载配置文件失败: " + e.message);
    }
    return {};
}

/**
* 保存配置到文件
* @param {Object} configs - 配置对象
* @returns {boolean} 是否成功
*/
function saveConfigToFile(configs) {
    try {
      if (typeof files !== 'undefined') {
            var content = JSON.stringify(configs, null, 2);
            files.write(CONFIG_FILE_PATH, content);
            printl("✅ 配置已保存到文件: " + CONFIG_FILE_PATH);
            return true;
      }
    } catch (e) {
      printl("⚠️ 保存配置文件失败: " + e.message);
    }
    return false;
}

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

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

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

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

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

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

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

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

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

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

/**
* 设置配置(供 H5 调用)
* @param {string} key - 配置键
* @param {string} value - 配置值
* @returns {boolean} 是否成功
*/
this.setConfig = function(key, value) {
    try {
      var fullKey = "AIWROK_" + key;
      config.setConfig(fullKey, String(value));
      printl(" 设置配置: " + fullKey + " = " + value);
      LogManagerH5.success("✓ 配置已保存: " + key);
      return true;
    } catch (e) {
      printl("[错误] 设置配置失败: " + e.message);
      LogManagerH5.error("✗ 保存失败: " + e.message);
      return false;
    }
};

/**
* 获取配置(供 H5 调用)
* @param {string} key - 配置键
* @returns {string} 配置值
*/
this.getConfig = function(key) {
    try {
      var fullKey = "AIWROK_" + key;
      var value = config.getConfig(fullKey, "");
      printl(" 获取配置: " + fullKey + " = " + value);
      return value;
    } catch (e) {
      printl("[错误] 获取配置失败: " + e.message);
      return "";
    }
};

/**
* 批量保存配置(供 H5 调用)
* @param {string} configsJson - JSON 字符串格式的配置对象
* @returns {boolean} 是否成功
*/
this.batchSetConfigs = function(configsJson) {
    try {
      var configs = JSON.parse(configsJson);
      var count = 0;
      for (var key in configs) {
            config.setConfig("AIWROK_" + key, String(configs));
            count++;
      }
      printl(" 批量保存 " + count + " 个配置");
      LogManagerH5.success("✓ 批量保存 " + count + " 个配置");
      return true;
    } catch (e) {
      printl("[错误] 批量保存失败: " + e.message);
      LogManagerH5.error("✗ 批量保存失败: " + e.message);
      return false;
    }
};

/**
* 批量获取配置(供 H5 调用)
* @param {string} keysJson - JSON 字符串格式的键数组
* @returns {string} JSON 字符串格式的配置对象
*/
this.batchGetConfigs = function(keysJson) {
    try {
      var keys = JSON.parse(keysJson);
      var result = {};
      for (var i = 0; i < keys.length; i++) {
            var key = keys;
            result = config.getConfig("AIWROK_" + key, "");
      }
      printl(" 批量获取 " + keys.length + " 个配置");
      return JSON.stringify(result);
    } catch (e) {
      printl("[错误] 批量获取失败: " + e.message);
      return "{}";
    }
};

/**
* 导出所有配置(供 H5 调用)
* @returns {string} JSON 字符串格式的所有配置
*/
this.exportAllConfigs = function() {
    try {
      var allKeys = [
            "game_name", "task_delay", "max_rounds", "enable_combat", "auto_heal",
            "ocr_language", "ocr_confidence", "ocr_timeout", "ocr_retry",
            "ui_theme", "ui_font_size", "ui_show_toolbar", "ui_animation",
            "network_base_url", "network_version", "network_timeout", "network_retries"
      ];
      
      var result = {};
      for (var i = 0; i < allKeys.length; i++) {
            var key = allKeys;
            result = config.getConfig("AIWROK_" + key, "");
      }
      
      var jsonStr = JSON.stringify(result, null, 2);
      printl(" 导出所有配置");
      LogManagerH5.info("&#128228; 配置已导出");
      return jsonStr;
    } catch (e) {
      printl("[错误] 导出配置失败: " + e.message);
      LogManagerH5.error("✗ 导出失败: " + e.message);
      return "{}";
    }
};

/**
* 恢复默认配置(供 H5 调用)
* @param {string} category - 配置分类 (game/ocr/ui/network/all)
* @returns {string} JSON 字符串格式的默认配置
*/
this.resetToDefault = function(category) {
    try {
      var defaultConfigs = {};
      
      if (category === "game" || category === "all") {
            defaultConfigs.game_name = "梦幻西游";
            defaultConfigs.task_delay = "2000";
            defaultConfigs.max_rounds = "10";
            defaultConfigs.enable_combat = "true";
            defaultConfigs.auto_heal = "true";
      }
      
      if (category === "ocr" || category === "all") {
            defaultConfigs.ocr_language = "zh-CN";
            defaultConfigs.ocr_confidence = "80";
            defaultConfigs.ocr_timeout = "5000";
            defaultConfigs.ocr_retry = "3";
      }
      
      if (category === "ui" || category === "all") {
            defaultConfigs.ui_theme = "dark";
            defaultConfigs.ui_font_size = "16";
            defaultConfigs.ui_show_toolbar = "true";
            defaultConfigs.ui_animation = "true";
      }
      
      if (category === "network" || category === "all") {
            defaultConfigs.network_base_url = "https://api.example.com";
            defaultConfigs.network_version = "v2";
            defaultConfigs.network_timeout = "10000";
            defaultConfigs.network_retries = "3";
      }
      
      // 保存到 config
      for (var key in defaultConfigs) {
            config.setConfig("AIWROK_" + key, defaultConfigs);
      }
      
      // 同时保存到文件
      saveConfigToFile(defaultConfigs);
      
      printl(" 恢复默认配置: " + category);
      LogManagerH5.warn("&#128465;️ 已恢复" + category + "默认配置");
      return JSON.stringify(defaultConfigs);
    } catch (e) {
      printl("[错误] 恢复默认配置失败: " + e.message);
      LogManagerH5.error("✗ 恢复失败: " + e.message);
      return "{}";
    }
};

/**
* Toast 提示(供 H5 调用)
* @param {string} message - 提示消息
*/
this.showToast = function(message) {
    printl(" Toast: " + message);
    toast(message);
};

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

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

/**
* 从文件加载配置(供 H5 调用)
* @returns {string} JSON 字符串格式的配置
*/
this.loadConfigFromFile = function() {
    try {
      var configs = loadConfigFromFile();
      // 同步到 config 系统
      for (var key in configs) {
            config.setConfig("AIWROK_" + key, configs);
      }
      printl(" 从文件加载配置: " + Object.keys(configs).length + " 个配置项");
      LogManagerH5.success("&#128194; 已从文件加载配置");
      return JSON.stringify(configs);
    } catch (e) {
      printl("[错误] 从文件加载配置失败: " + e.message);
      LogManagerH5.error("✗ 加载失败: " + e.message);
      return "{}";
    }
};

/**
* 保存配置到文件(供 H5 调用)
* @returns {boolean} 是否成功
*/
this.saveConfigToFile = function() {
    try {
      // 从 config 系统获取所有配置
      var allKeys = [
            "game_name", "task_delay", "max_rounds", "enable_combat", "auto_heal"
      ];
      var configs = {};
      for (var i = 0; i < allKeys.length; i++) {
            var key = allKeys;
            var value = config.getConfig("AIWROK_" + key, "");
            if (value) {
                configs = value;
            }
      }
      
      // 保存到文件
      var success = saveConfigToFile(configs);
      if (success) {
            printl(" 配置已保存到文件: " + CONFIG_FILE_PATH);
            LogManagerH5.success("&#128190; 配置已保存到文件");
      }
      return success;
    } catch (e) {
      printl("[错误] 保存到文件失败: " + e.message);
      LogManagerH5.error("✗ 保存失败: " + e.message);
      return false;
    }
};

printl("✓ H5 交互方法注册完成");
printl("- this.setConfig");
printl("- this.getConfig");
printl("- this.batchSetConfigs");
printl("- this.batchGetConfigs");
printl("- this.exportAllConfigs");
printl("- this.resetToDefault");
printl("- this.showToast");
printl("- this.addNativeLog");
printl("- this.getConfigFilePath ⭐ 新增");
printl("- this.loadConfigFromFile ⭐ 新增");
printl("- this.saveConfigToFile ⭐ 新增");
LogManagerH5.success("✓ Native 桥接方法已就绪");

// ============================================
// HID 滑动功能演示
// ============================================
printl("\n=== HID 滑动功能演示 ===");

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

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

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

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

// ============================================
// 演示:预设配置数据
// ============================================
_sleep(1000);

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

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

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

// ============================================
// Toast 演示
// ============================================
_sleep(2000);
try { toast("&#127881; 欢迎使用 AIWROK 配置中心"); } catch(e) {}
_sleep(1500);
try { toast("&#128190; 点击按钮保存配置"); } catch(e) {}
_sleep(1500);
try { toast("&#128194; 点击按钮加载配置"); } catch(e) {}
_sleep(1500);
try { toast("&#128295; 测试 CONFIG 功能"); } catch(e) {}

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


页: [1]
查看完整版本: 苹果脚本示例Config配置H5集成