B2B网络软件

标题: AIWROK苹果系统打印H5界面日志输出 [打印本页]

作者: YYPOST群发软件    时间: 2 小时前
标题: AIWROK苹果系统打印H5界面日志输出

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


AIWROK苹果系统打印H5界面日志输出 B2B网络软件

  1. /**
  2. * ============================================
  3. * 日志桥接器 - 将print日志输出到H5界面
  4. * 版本: 1.1.0
  5. * 平台: iOS (AIWROK)
  6. * 功能: 桥接print日志系统到现有H5界面
  7. * 交流QQ群: 711841924 (群一) / 528816639 (苹果内测群)
  8. * ============================================
  9. */
  10. // 🍎交流QQ群:711841924(群)
  11. // 🍎交流QQ群:528816639  (苹果内测群)
  12. /**
  13. * 阻塞式延迟函数 (Rhino引擎兼容)
  14. * @param {number} ms - 延迟毫秒数
  15. */
  16. function _sleep(ms) {
  17.     var start = Date.now();
  18.     while (Date.now() - start < ms) {
  19.         // 阻塞等待
  20.     }
  21. }

  22. /**
  23. * LogBridge - 日志桥接器
  24. * 将print日志系统的输出桥接到指定的WebView
  25. */
  26. var LogBridge = {
  27.     webView: null,
  28.     isReady: false,
  29.     pendingLogs: [],
  30.     maxPendingLogs: 100,
  31.    
  32.     /**
  33.      * 初始化桥接器
  34.      * @param {WebView} webView - 目标WebView实例
  35.      */
  36.     init: function(webView) {
  37.         this.webView = webView;
  38.         this.isReady = false;
  39.         this.pendingLogs = [];
  40.         
  41.         // 阻塞等待WebView加载完成
  42.         _sleep(800);
  43.         
  44.         this.isReady = true;
  45.         this._flushPendingLogs();
  46.         printl('日志桥接器已就绪');
  47.         
  48.         return this;
  49.     },
  50.    
  51.     /**
  52.      * 发送日志到H5
  53.      * @param {string} message - 日志消息
  54.      * @param {string} level - 日志级别 (info/success/warn/error/gold/debug)
  55.      */
  56.     log: function(message, level) {
  57.         level = level || 'info';
  58.         
  59.         // 如果还没准备好,缓存日志
  60.         if (!this.isReady || !this.webView) {
  61.             if (this.pendingLogs.length < this.maxPendingLogs) {
  62.                 this.pendingLogs.push({
  63.                     message: message,
  64.                     level: level,
  65.                     time: Date.now()
  66.                 });
  67.             }
  68.             return;
  69.         }
  70.         
  71.         this._sendToWebView(message, level);
  72.     },
  73.    
  74.     /**
  75.      * 刷新缓存的日志
  76.      */
  77.     _flushPendingLogs: function() {
  78.         if (this.pendingLogs.length === 0) return;
  79.         
  80.         printl('正在刷新 ' + this.pendingLogs.length + ' 条缓存日志...');
  81.         
  82.         // 逐条发送缓存的日志
  83.         while (this.pendingLogs.length > 0) {
  84.             var log = this.pendingLogs.shift();
  85.             this._sendToWebView(log.message, log.level);
  86.             // 小延迟避免阻塞
  87.             _sleep(10);
  88.         }
  89.     },
  90.    
  91.     /**
  92.      * 实际发送日志到WebView
  93.      */
  94.     _sendToWebView: function(message, level) {
  95.         try {
  96.             if (!this.webView) return;
  97.             
  98.             // 转义消息中的特殊字符
  99.             var escapedMessage = message
  100.                 .replace(/\\/g, '\\\\')
  101.                 .replace(/'/g, "\\'")
  102.                 .replace(/"/g, '\\"')
  103.                 .replace(/\n/g, '\\n')
  104.                 .replace(/\r/g, '\\r')
  105.                 .replace(/\t/g, '\\t');
  106.             
  107.             // 构建JavaScript代码
  108.             var js = "if(typeof addLog === 'function') { addLog('" + escapedMessage + "', '" + level + "'); }";
  109.             
  110.             // 尝试多种方式执行JavaScript
  111.             if (typeof this.webView.evaluateJavaScript === 'function') {
  112.                 this.webView.evaluateJavaScript(js);
  113.             } else if (typeof this.webView.loadUrl === 'function') {
  114.                 var url = 'javascript:' + encodeURIComponent(js);
  115.                 this.webView.loadUrl(url);
  116.             } else if (typeof this.webView.stringByEvaluatingJavaScriptFromString === 'function') {
  117.                 this.webView.stringByEvaluatingJavaScriptFromString(js);
  118.             }
  119.         } catch (e) {
  120.             printl('发送日志失败: ' + e.message);
  121.         }
  122.     },
  123.    
  124.     // 快捷方法
  125.     info: function(message) { this.log(message, 'info'); },
  126.     success: function(message) { this.log(message, 'success'); },
  127.     warn: function(message) { this.log(message, 'warn'); },
  128.     error: function(message) { this.log(message, 'error'); },
  129.     gold: function(message) { this.log(message, 'gold'); },
  130.     debug: function(message) { this.log(message, 'debug'); }
  131. };

  132. /**
  133. * 增强版LogManager - 自动桥接到H5
  134. */
  135. var LogManagerH5 = {
  136.     logLevel: 'DEBUG',
  137.     enablePrefix: true,
  138.     bridge: null,
  139.    
  140.     ICONS: {
  141.         DEBUG: '[D]',
  142.         INFO: '[I]',
  143.         WARN: '[W]',
  144.         ERROR: '[E]',
  145.         SUCCESS: '[S]',
  146.         GOLD: '[G]'
  147.     },
  148.    
  149.     /**
  150.      * 初始化并绑定到WebView
  151.      * @param {WebView} webView - H5的WebView实例
  152.      */
  153.     init: function(webView) {
  154.         this.bridge = LogBridge;
  155.         this.bridge.init(webView);
  156.         this.info('日志系统已连接到H5界面');
  157.         return this;
  158.     },
  159.    
  160.     _formatMessage: function(message, icon) {
  161.         if (this.enablePrefix && icon) {
  162.             return icon + ' ' + message;
  163.         }
  164.         return message;
  165.     },
  166.    
  167.     debug: function(message) {
  168.         if (this.bridge) {
  169.             this.bridge.log(this._formatMessage(message, this.ICONS.DEBUG), 'debug');
  170.         }
  171.         printl(message);
  172.     },
  173.    
  174.     info: function(message) {
  175.         if (this.bridge) {
  176.             this.bridge.log(this._formatMessage(message, this.ICONS.INFO), 'info');
  177.         }
  178.         print.log(message);
  179.     },
  180.    
  181.     warn: function(message) {
  182.         if (this.bridge) {
  183.             this.bridge.log(this._formatMessage(message, this.ICONS.WARN), 'warn');
  184.         }
  185.         print.warn(message);
  186.     },
  187.    
  188.     error: function(message) {
  189.         if (this.bridge) {
  190.             this.bridge.log(this._formatMessage(message, this.ICONS.ERROR), 'error');
  191.         }
  192.         print.warn(message);
  193.     },
  194.    
  195.     success: function(message) {
  196.         if (this.bridge) {
  197.             this.bridge.log(this._formatMessage(message, this.ICONS.SUCCESS), 'success');
  198.         }
  199.         print.log(message);
  200.     },
  201.    
  202.     gold: function(message) {
  203.         if (this.bridge) {
  204.             this.bridge.log(this._formatMessage(message, this.ICONS.GOLD), 'gold');
  205.         }
  206.         print.log(message);
  207.     }
  208. };

  209. /**
  210. * 使用示例:
  211. *
  212. * // 在你的主脚本中:
  213. * Import("LogBridge.js");
  214. *
  215. * var web = new WebView();
  216. * web.show();
  217. * web.loadFile('h5.html');
  218. *
  219. * // 初始化日志桥接 (会阻塞等待WebView加载)
  220. * LogManagerH5.init(web);
  221. *
  222. * // 现在所有日志都会输出到H5界面
  223. * LogManagerH5.info('系统启动');
  224. * LogManagerH5.success('任务完成');
  225. * LogManagerH5.gold('获得100金币');
  226. */
  227. /**
  228. * ============================================
  229. * &#127822; print日志系统完整示例
  230. * 功能: 日志记录、调试输出、画中画管理
  231. * 交流QQ群: 711841924 (群一) / 528816639 (苹果内测群)
  232. * ============================================
  233. */
复制代码


苹果H5界面.zip (19.43 KB, 下载次数: 0)

AIWROK苹果系统打印H5界面日志输出 B2B网络软件





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