YYPOST群发软件 发表于 2026-3-10 07:06:47

AIWROK苹果系统打印H5界面日志输出


AIWROK苹果系统打印H5界面日志输出




/**
* ============================================
* 日志桥接器 - 将print日志输出到H5界面
* 版本: 1.1.0
* 平台: iOS (AIWROK)
* 功能: 桥接print日志系统到现有H5界面
* 交流QQ群: 711841924 (群一) / 528816639 (苹果内测群)
* ============================================
*/
// 🍎交流QQ群:711841924(群)
// 🍎交流QQ群:528816639(苹果内测群)
/**
* 阻塞式延迟函数 (Rhino引擎兼容)
* @param {number} ms - 延迟毫秒数
*/
function _sleep(ms) {
    var start = Date.now();
    while (Date.now() - start < ms) {
      // 阻塞等待
    }
}

/**
* LogBridge - 日志桥接器
* 将print日志系统的输出桥接到指定的WebView
*/
var LogBridge = {
    webView: null,
    isReady: false,
    pendingLogs: [],
    maxPendingLogs: 100,
   
    /**
   * 初始化桥接器
   * @param {WebView} webView - 目标WebView实例
   */
    init: function(webView) {
      this.webView = webView;
      this.isReady = false;
      this.pendingLogs = [];
      
      // 阻塞等待WebView加载完成
      _sleep(800);
      
      this.isReady = true;
      this._flushPendingLogs();
      printl('日志桥接器已就绪');
      
      return this;
    },
   
    /**
   * 发送日志到H5
   * @param {string} message - 日志消息
   * @param {string} level - 日志级别 (info/success/warn/error/gold/debug)
   */
    log: function(message, level) {
      level = level || 'info';
      
      // 如果还没准备好,缓存日志
      if (!this.isReady || !this.webView) {
            if (this.pendingLogs.length < this.maxPendingLogs) {
                this.pendingLogs.push({
                  message: message,
                  level: level,
                  time: Date.now()
                });
            }
            return;
      }
      
      this._sendToWebView(message, level);
    },
   
    /**
   * 刷新缓存的日志
   */
    _flushPendingLogs: function() {
      if (this.pendingLogs.length === 0) return;
      
      printl('正在刷新 ' + this.pendingLogs.length + ' 条缓存日志...');
      
      // 逐条发送缓存的日志
      while (this.pendingLogs.length > 0) {
            var log = this.pendingLogs.shift();
            this._sendToWebView(log.message, log.level);
            // 小延迟避免阻塞
            _sleep(10);
      }
    },
   
    /**
   * 实际发送日志到WebView
   */
    _sendToWebView: function(message, level) {
      try {
            if (!this.webView) return;
            
            // 转义消息中的特殊字符
            var escapedMessage = message
                .replace(/\\/g, '\\\\')
                .replace(/'/g, "\\'")
                .replace(/"/g, '\\"')
                .replace(/\n/g, '\\n')
                .replace(/\r/g, '\\r')
                .replace(/\t/g, '\\t');
            
            // 构建JavaScript代码
            var js = "if(typeof addLog === 'function') { addLog('" + escapedMessage + "', '" + level + "'); }";
            
            // 尝试多种方式执行JavaScript
            if (typeof this.webView.evaluateJavaScript === 'function') {
                this.webView.evaluateJavaScript(js);
            } else if (typeof this.webView.loadUrl === 'function') {
                var url = 'javascript:' + encodeURIComponent(js);
                this.webView.loadUrl(url);
            } else if (typeof this.webView.stringByEvaluatingJavaScriptFromString === 'function') {
                this.webView.stringByEvaluatingJavaScriptFromString(js);
            }
      } catch (e) {
            printl('发送日志失败: ' + e.message);
      }
    },
   
    // 快捷方法
    info: function(message) { this.log(message, 'info'); },
    success: function(message) { this.log(message, 'success'); },
    warn: function(message) { this.log(message, 'warn'); },
    error: function(message) { this.log(message, 'error'); },
    gold: function(message) { this.log(message, 'gold'); },
    debug: function(message) { this.log(message, 'debug'); }
};

/**
* 增强版LogManager - 自动桥接到H5
*/
var LogManagerH5 = {
    logLevel: 'DEBUG',
    enablePrefix: true,
    bridge: null,
   
    ICONS: {
      DEBUG: '',
      INFO: '',
      WARN: '',
      ERROR: '',
      SUCCESS: '',
      GOLD: ''
    },
   
    /**
   * 初始化并绑定到WebView
   * @param {WebView} webView - H5的WebView实例
   */
    init: function(webView) {
      this.bridge = LogBridge;
      this.bridge.init(webView);
      this.info('日志系统已连接到H5界面');
      return this;
    },
   
    _formatMessage: function(message, icon) {
      if (this.enablePrefix && icon) {
            return icon + ' ' + message;
      }
      return message;
    },
   
    debug: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.DEBUG), 'debug');
      }
      printl(message);
    },
   
    info: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.INFO), 'info');
      }
      print.log(message);
    },
   
    warn: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.WARN), 'warn');
      }
      print.warn(message);
    },
   
    error: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.ERROR), 'error');
      }
      print.warn(message);
    },
   
    success: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.SUCCESS), 'success');
      }
      print.log(message);
    },
   
    gold: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.GOLD), 'gold');
      }
      print.log(message);
    }
};

/**
* 使用示例:
*
* // 在你的主脚本中:
* Import("LogBridge.js");
*
* var web = new WebView();
* web.show();
* web.loadFile('h5.html');
*
* // 初始化日志桥接 (会阻塞等待WebView加载)
* LogManagerH5.init(web);
*
* // 现在所有日志都会输出到H5界面
* LogManagerH5.info('系统启动');
* LogManagerH5.success('任务完成');
* LogManagerH5.gold('获得100金币');
*/
/**
* ============================================
* &#127822; print日志系统完整示例
* 功能: 日志记录、调试输出、画中画管理
* 交流QQ群: 711841924 (群一) / 528816639 (苹果内测群)
* ============================================
*/




页: [1]
查看完整版本: AIWROK苹果系统打印H5界面日志输出