 | |  |  | AIWORK软件配置读写H5演示配套脚本
- //🍎交流QQ群711841924群一,苹果内测群,528816639
- // AIWROK配置读写H5演示配套脚本
- // 本文件提供了详细的配置读写示例和说明,与config_h5_demo.html配合使用
- // 注意:此代码需在AIWROK环境中运行,因为config对象由AIWROK提供
- // 修复window.onload与window.onLoad的兼容性问题
- // AIWROK环境使用onLoad(大写L),而标准浏览器使用onload(小写l)
- if (typeof window !== 'undefined') {
- // 安全地检查window.onLoad和window.onload
- try {
- var hasOnLoad = typeof window.onLoad === 'function';
- var hasOnload = typeof window.onload === 'function';
-
- if (hasOnLoad && !hasOnload) {
- // 如果存在window.onLoad但不存在window.onload,则创建window.onload的别名
- window.onload = window.onLoad;
- }
- } catch (e) {
- // 忽略任何错误
- }
-
- // 安全地处理AIWROK特定的Windows对象(大写W)
- try {
- if (typeof window.Windows !== 'undefined') {
- // 使用try-catch安全访问Java对象的属性
- window.Windows.onload = function(callback) {
- if (typeof window.Windows.onLoad === 'function') {
- window.Windows.onLoad(callback);
- }
- };
- }
- } catch (e) {
- // 忽略任何错误
- }
- }
- // 配置文件路径常量
- var CONFIG_FILE_PATH = '/sdcard/aiwrok_h5_config.ini';
- /**
- * 检查AIWROK环境是否可用
- */
- function checkAIWROKEnvironment() {
- var isAIWROKEnvironment = typeof config !== 'undefined' &&
- typeof config.setConfig === 'function' &&
- typeof config.getConfig === 'function';
-
- if (!isAIWROKEnvironment) {
- printl('⚠️ 错误:当前环境不是AIWROK环境,config对象不可用!');
- printl('请确保在AIWROK环境中运行此脚本。');
- return false;
- }
-
- // 检查文件系统访问权限(尝试写入一个简单的配置项来测试)
- try {
- config.setConfig(CONFIG_FILE_PATH, '_test_access', '1');
- config.getConfig(CONFIG_FILE_PATH, '_test_access', '0');
- config.setConfig(CONFIG_FILE_PATH, '_test_access', ''); // 清理测试项
- return true;
- } catch (e) {
- printl('⚠️ 错误:无法访问配置文件路径!');
- printl('错误信息:' + e.message);
- printl('请检查是否有文件系统访问权限,以及路径是否正确。');
- return false;
- }
- }
- /**
- * 主函数:执行配置读写演示
- */
- function runConfigDemo() {
- printl('===== AIWROK配置读写H5演示配套脚本 =====');
- printl('本脚本与config_h5_demo.html配合使用,展示配置读写的详细功能');
-
- // 检查AIWROK环境
- if (!checkAIWROKEnvironment()) {
- printl('\n===== 演示失败:环境检查未通过 =====');
- return;
- }
-
- printl('\n✅ 环境检查通过,开始演示...');
-
- // 演示基本功能
- demonstrateBasicFunctions();
-
- // 演示高级功能
- demonstrateAdvancedFunctions();
-
- // 演示错误处理
- demonstrateErrorHandling();
-
- // 演示H5集成功能
- h5IntegrationHelpers();
-
- printl('\n===== 演示完成 =====');
-
- // 将提示信息移到函数内部,在演示过程中显示
- printl('\n提示:在实际使用中,请确保有正确的文件系统访问权限,并根据您的实际需求修改配置文件路径和配置项。');
- printl('本脚本可以独立运行,也可以与config_h5_demo.html配合使用。');
- }
- /**
- * 演示基本配置读写功能
- */
- function demonstrateBasicFunctions() {
- printl('\n1. 基本配置读写功能演示:');
-
- try {
- // 写入配置示例
- printl(' 写入配置示例:');
-
- // 写入字符串配置
- printl(' - 准备写入: demo_name = 中文H5配置演示');
- var result1 = config.setConfig(CONFIG_FILE_PATH, 'demo_name', '中文H5配置演示');
- printl(' - 写入结果: ' + (result1 ? '成功' : '失败'));
-
- // 写入数字配置
- printl(' - 准备写入: demo_version = 1.0.0');
- var result2 = config.setConfig(CONFIG_FILE_PATH, 'demo_version', '1.0.0');
- printl(' - 写入结果: ' + (result2 ? '成功' : '失败'));
-
- // 写入布尔配置
- printl(' - 准备写入: demo_enabled = true');
- var result3 = config.setConfig(CONFIG_FILE_PATH, 'demo_enabled', 'true');
- printl(' - 写入结果: ' + (result3 ? '成功' : '失败'));
-
- // 读取配置示例
- printl('\n 读取配置示例:');
-
- var demoName = config.getConfig(CONFIG_FILE_PATH, 'demo_name', 'Default_Demo');
- printl(' - 读取demo_name: ' + demoName + (demoName === '中文H5配置演示' ? ' (正确)' : ' (错误)'));
-
- var demoVersion = config.getConfig(CONFIG_FILE_PATH, 'demo_version', '0.0.1');
- printl(' - 读取demo_version: ' + demoVersion + (demoVersion === '1.0.0' ? ' (正确)' : ' (错误)'));
-
- var demoEnabled = config.getConfig(CONFIG_FILE_PATH, 'demo_enabled', 'false');
- printl(' - 读取demo_enabled: ' + demoEnabled + (demoEnabled === 'true' ? ' (正确)' : ' (错误)'));
-
- // 使用默认值读取不存在的配置
- var nonExistent = config.getConfig(CONFIG_FILE_PATH, 'non_existent_key', 'default_value');
- printl(' - 读取不存在的配置(使用默认值): ' + nonExistent);
-
- } catch (e) {
- printl(' 基本功能演示出错: ' + e.message);
- console.error('基本功能演示出错: ', e);
- }
- }
- /**
- * 演示高级配置功能
- */
- function demonstrateAdvancedFunctions() {
- printl('\n2. 高级配置功能演示:');
-
- // 创建配置管理器实例
- var configManager = new ConfigManager(CONFIG_FILE_PATH);
-
- try {
- // 使用配置管理器写入配置
- printl(' 使用配置管理器写入配置:');
-
- configManager.set('user_name', '测试用户');
- printl(' - 已写入user_name: 测试用户');
-
- configManager.set('user_age', 25);
- printl(' - 已写入user_age: 25');
-
- configManager.set('user_active', true);
- printl(' - 已写入user_active: true');
-
- // 使用配置管理器读取配置
- printl('\n 使用配置管理器读取配置:');
-
- var userName = configManager.get('user_name', 'default_user');
- printl(' - 读取user_name: ' + userName);
-
- var userAge = configManager.getNumber('user_age', 18);
- printl(' - 读取user_age(数字类型): ' + userAge + ' (类型: ' + typeof userAge + ')');
-
- var userActive = configManager.getBoolean('user_active', false);
- printl(' - 读取user_active(布尔类型): ' + userActive + ' (类型: ' + typeof userActive + ')');
-
- // 配置批量操作示例
- printl('\n 配置批量操作示例:');
-
- var batchConfig = {
- 'app_name': 'AIWROK_H5_Demo',
- 'app_author': 'AIWROK_Team',
- 'app_date': getCurrentDate()
- };
-
- // 批量写入
- for (var key in batchConfig) {
- if (batchConfig.hasOwnProperty(key)) {
- configManager.set(key, batchConfig[key]);
- printl(' - 批量写入: ' + key + ' = ' + batchConfig[key]);
- }
- }
-
- // 批量读取
- var keys = ['app_name', 'app_author', 'app_date'];
- printl('\n 批量读取:');
- for (var i = 0; i < keys.length; i++) {
- var value = configManager.get(keys[i], '未设置');
- printl(' ' + keys[i] + ': ' + value);
- }
-
- } catch (e) {
- printl(' 高级功能演示出错: ' + e.message);
- }
- }
- /**
- * 演示错误处理
- */
- function demonstrateErrorHandling() {
- printl('\n3. 错误处理演示:');
-
- try {
- // 尝试写入不存在的路径(可能会失败)
- printl(' 错误处理示例:');
-
- // 尝试写入到一个可能没有权限的路径
- try {
- config.setConfig('/system/protected/config.ini', 'test_key', 'test_value');
- printl(' - 写入受保护路径成功(可能有权限问题)');
- } catch (e) {
- printl(' - 写入受保护路径失败(预期行为): ' + e.message);
- }
-
- // 优雅地处理错误
- printl('\n 优雅的错误处理示例:');
-
- function safeSetConfig(key, value) {
- try {
- config.setConfig(CONFIG_FILE_PATH, key, value);
- return true;
- } catch (e) {
- printl(' - 安全写入失败: ' + key + ', 错误: ' + e.message);
- return false;
- }
- }
-
- // 使用安全写入函数
- safeSetConfig('safe_key', 'safe_value');
- safeSetConfig('another_key', 'another_value');
-
- printl(' - 安全写入完成');
-
- } catch (e) {
- printl(' 错误处理演示出错: ' + e.message);
- }
- }
- /**
- * 配置管理器类(ES5兼容版)
- */
- function ConfigManager(filePath) {
- this.filePath = filePath;
- }
- // 配置管理器原型方法
- ConfigManager.prototype = {
- constructor: ConfigManager,
-
- /**
- * 设置配置项
- * @param {string} key - 配置项名称
- * @param {*} value - 配置项值
- * @returns {boolean} - 是否成功
- */
- set: function(key, value) {
- try {
- var result = config.setConfig(this.filePath, key, String(value));
- printl(' → ConfigManager.set(' + key + ', ' + value + ') = ' + (result ? '成功' : '失败'));
- return true;
- } catch (e) {
- printl(' → ConfigManager.set(' + key + ', ' + value + ') 失败: ' + e.message);
- console.error('设置配置失败: ' + e.message);
- return false;
- }
- },
-
- /**
- * 获取配置项
- * @param {string} key - 配置项名称
- * @param {*} defaultValue - 默认值
- * @returns {string} - 配置项值
- */
- get: function(key, defaultValue) {
- try {
- var defaultVal = defaultValue !== undefined ? String(defaultValue) : '';
- var result = config.getConfig(this.filePath, key, defaultVal);
- printl(' → ConfigManager.get(' + key + ', ' + defaultVal + ') = ' + result);
- return result;
- } catch (e) {
- printl(' → ConfigManager.get(' + key + ', ' + defaultVal + ') 失败: ' + e.message);
- console.error('获取配置失败: ' + e.message);
- return defaultValue !== undefined ? defaultValue : '';
- }
- },
-
- /**
- * 获取布尔类型配置项
- * @param {string} key - 配置项名称
- * @param {boolean} defaultValue - 默认值
- * @returns {boolean} - 布尔值
- */
- getBoolean: function(key, defaultValue) {
- var value = this.get(key, defaultValue ? 'true' : 'false');
- return value.toLowerCase() === 'true' || value === '1';
- },
-
- /**
- * 获取数字类型配置项
- * @param {string} key - 配置项名称
- * @param {number} defaultValue - 默认值
- * @returns {number} - 数字值
- */
- getNumber: function(key, defaultValue) {
- var value = this.get(key, defaultValue !== undefined ? String(defaultValue) : '0');
- return parseFloat(value) || 0;
- },
-
- /**
- * 批量设置配置
- * @param {Object} configObj - 配置对象
- * @returns {boolean} - 是否全部成功
- */
- setBatch: function(configObj) {
- var allSuccess = true;
-
- for (var key in configObj) {
- if (configObj.hasOwnProperty(key)) {
- if (!this.set(key, configObj[key])) {
- allSuccess = false;
- }
- }
- }
-
- return allSuccess;
- },
-
- /**
- * 批量获取配置
- * @param {Array} keys - 配置项名称数组
- * @param {Object} defaultValues - 默认值对象
- * @returns {Object} - 配置对象
- */
- getBatch: function(keys, defaultValues) {
- var result = {};
- defaultValues = defaultValues || {};
-
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- var defaultValue = defaultValues[key] !== undefined ? defaultValues[key] : '';
- result[key] = this.get(key, defaultValue);
- }
-
- return result;
- }
- };
- /**
- * 获取当前日期时间字符串
- */
- function getCurrentDate() {
- var now = new Date();
- var year = now.getFullYear();
- var month = now.getMonth() + 1;
- var day = now.getDate();
- var hours = now.getHours();
- var minutes = now.getMinutes();
- var seconds = now.getSeconds();
-
- // 格式化日期时间
- return year + '-' + padZero(month) + '-' + padZero(day) + ' ' +
- padZero(hours) + ':' + padZero(minutes) + ':' + padZero(seconds);
- }
- /**
- * 数字补零
- */
- function padZero(num) {
- return num < 10 ? '0' + num : num;
- }
- /**
- * 与H5页面集成的辅助函数
- */
- function h5IntegrationHelpers() {
- printl('\n4. H5页面集成辅助函数:');
- printl(' 以下是与config_h5_demo.html配合使用的辅助函数');
-
- // 注意:这些函数在H5页面中已通过JavaScript实现,这里仅作为示例展示
- printl(' - saveConfig(): 保存页面上的所有配置到文件');
- printl(' - loadConfig(): 从文件加载配置到页面');
- printl(' - clearConfig(): 清除页面上的所有配置');
- printl(' - ConfigManager: 配置管理辅助类,简化配置读写');
- }
- /**
- * H5页面中使用的配置同步函数
- * 注意:此函数在H5页面中已实现,这里仅作为示例
- */
- function syncConfigFromH5ToNative(configData) {
- /**
- * 从H5页面同步配置到本地文件
- * @param {Object} configData - H5页面的配置数据
- */
- printl('\n5. H5与Native配置同步示例:');
- printl(' 从H5页面同步配置到本地文件的示例函数');
-
- if (typeof configData === 'object' && configData !== null) {
- printl(' - 同步配置数据:');
-
- for (var key in configData) {
- if (configData.hasOwnProperty(key)) {
- printl(' ' + key + ': ' + configData[key]);
- // 实际保存配置到本地文件
- try {
- config.setConfig(CONFIG_FILE_PATH, key, String(configData[key]));
- printl(' ✓ 已保存到配置文件');
- } catch (e) {
- printl(' ✗ 保存失败: ' + e.message);
- }
- }
- }
-
- // 验证配置是否正确保存
- printl('\n - 验证保存的配置:');
- for (var key in configData) {
- if (configData.hasOwnProperty(key)) {
- var savedValue = config.getConfig(CONFIG_FILE_PATH, key, '未找到');
- printl(' ' + key + ': ' + savedValue + (savedValue === String(configData[key]) ? ' (匹配)' : ' (不匹配)'));
- }
- }
- } else {
- printl(' - 无效的配置数据');
- }
- }
- /**
- * 验证配置文件内容的函数
- */
- function verifyConfigFileContent() {
- printl('\n6. 配置文件内容验证:');
- printl(' 验证配置文件中实际存储的内容');
-
- try {
- // 列出所有演示中使用的配置项
- var testKeys = [
- 'demo_name', 'demo_version', 'demo_enabled',
- 'user_name', 'user_age', 'user_active',
- 'app_name', 'app_author', 'app_date'
- ];
-
- printl(' - 配置文件路径: ' + CONFIG_FILE_PATH);
- printl(' - 配置项验证结果:');
-
- var allCorrect = true;
-
- for (var i = 0; i < testKeys.length; i++) {
- var key = testKeys[i];
- var value = config.getConfig(CONFIG_FILE_PATH, key, '**未找到**');
- printl(' ' + key + ': ' + value);
-
- if (value === '**未找到**') {
- allCorrect = false;
- }
- }
-
- printl('\n - 验证结果: ' + (allCorrect ? '✅ 所有配置项都已正确保存' : '⚠️ 部分配置项未找到'));
-
- } catch (e) {
- printl(' 配置文件验证出错: ' + e.message);
- console.error('配置文件验证出错: ', e);
- }
- }
- /**
- * 执行演示
- */
- try {
- runConfigDemo();
-
- // 验证配置文件内容
- verifyConfigFileContent();
-
- /**
- * 导出配置管理器供其他脚本使用
- */
- if (typeof module !== 'undefined' && module.exports) {
- module.exports = ConfigManager;
- }
-
- printl('\n📝 最终提示:');
- printl(' - 配置文件已保存到: ' + CONFIG_FILE_PATH);
- printl(' - 您可以在AIWROK环境中查看或编辑该文件');
- printl(' - 如果配置文件未正确读写,请检查文件系统访问权限');
- } catch (e) {
- // 捕获任何可能的异常,避免传播到AIWROK环境
- console.error('演示执行异常: ' + e.message);
- printl('\n❌ 演示执行失败: ' + e.message);
- }
复制代码
| |  | |  |
|