B2B网络软件
标题:
苹果脚本示例Config配置H5集成
[打印本页]
作者:
YYPOST群发软件
时间:
前天 07:52
标题:
苹果脚本示例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("[H5→Native] 设置配置: " + 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("[H5→Native] 获取配置: " + 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[key]));
count++;
}
printl("[H5→Native] 批量保存 " + 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[i];
result[key] = config.getConfig("AIWROK_" + key, "");
}
printl("[H5→Native] 批量获取 " + 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[i];
result[key] = config.getConfig("AIWROK_" + key, "");
}
var jsonStr = JSON.stringify(result, null, 2);
printl("[H5→Native] 导出所有配置");
LogManagerH5.info("📤 配置已导出");
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[key]);
}
// 同时保存到文件
saveConfigToFile(defaultConfigs);
printl("[H5→Native] 恢复默认配置: " + category);
LogManagerH5.warn("🗑️ 已恢复" + 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("[H5→Native] Toast: " + message);
toast(message);
};
/**
* 添加日志(供 H5 调用)
* @param {string} message - 日志消息
* @param {string} level - 日志级别
*/
this.addNativeLog = function(message, level) {
printl("[H5 日志][" + 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[key]);
}
printl("[H5→Native] 从文件加载配置: " + Object.keys(configs).length + " 个配置项");
LogManagerH5.success("📂 已从文件加载配置");
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[i];
var value = config.getConfig("AIWROK_" + key, "");
if (value) {
configs[key] = value;
}
}
// 保存到文件
var success = saveConfigToFile(configs);
if (success) {
printl("[H5→Native] 配置已保存到文件: " + CONFIG_FILE_PATH);
LogManagerH5.success("💾 配置已保存到文件");
}
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👆 演示 1: 向下滑动(查看底部内容)");
try { toast("👆 向下滑动..."); } 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👆 演示 2: 向上滑动(返回顶部)");
try { toast("👆 向上滑动..."); } 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("🎉 欢迎使用 AIWROK 配置中心"); } catch(e) {}
_sleep(1500);
try { toast("💾 点击按钮保存配置"); } catch(e) {}
_sleep(1500);
try { toast("📂 点击按钮加载配置"); } catch(e) {}
_sleep(1500);
try { toast("🔧 测试 CONFIG 功能"); } catch(e) {}
printl("\n✓ 所有演示完成,现在可以使用 H5 界面了");
复制代码
欢迎光临 B2B网络软件 (http://bbs.niubt.cn/)
Powered by Discuz! X3.2