UNPKG

mobile-eruda-pro

Version:

移动端调试工具,封装了eruda和eruda-vue,支持微信小程序调试,实时日志,优化点击触发机制,支持URL参数控制,多次点击显示隐藏,全局控制console和alert

1 lines 11 kB
(function (global,factory){typeof exports==='object'&&typeof module!=='undefined'?module.exports=factory():typeof define==='function'&&define.amd?define(factory):(global.ErudaManage=factory());}(this,(function (){'use strict';var ErudaManage={};var config={cdn:'//cdn.jsdelivr.net/npm/eruda',vuePlugin:true,tool:'eruda',en try:null,displayCount:5,triggerElement:document,reportUrl:'',disableMenu:false,disableConsole:false,environment:'auto',autoDetectWechat:false,enableRealtimeLog:false,realtimeLogFilterMsg:'',realtimeLogTag:'ErudaManage',enableWebSocketMonitor:true,maxTapInterval:1000,minTapInterval:100,resetTimeout:3000};ErudaManage.init=function (options){for (var key in options){if (options.hasOwnProperty(key)){config[key]=options[key];}} var showEruda=false;if (getParameter('eruda')==='true'){showEruda=true;localStorage.setItem('active-eruda','true');} else if (getParameter('eruda')==='false'){localStorage.removeItem('active-eruda');} else if (localStorage.getItem('active-eruda')==='true'){showEruda=true;} var tappedTimes=0;var lastTapTime=0;var tapTimeout=null;var maxTapInterval=config.maxTapInterval;var minTapInterval=config.minTapInterval;var resetTimeout=config.resetTimeout;var triggerEl=config.triggerElement;if (typeof triggerEl==='string'){triggerEl=document.querySelector(triggerEl);} if (!triggerEl)triggerEl=document;triggerEl.addEventListener('click',function (e){var currentTime=Date.now();if (currentTime-lastTapTime<minTapInterval){return;} if (currentTime-lastTapTime>maxTapInterval){tappedTimes=0;}tappedTimes++;lastTapTime=currentTime;if (tapTimeout){clearTimeout(tapTimeout);}tapTimeout=setTimeout(function (){tappedTimes=0;},resetTimeout);if (tappedTimes>=config.displayCount){tappedTimes=0;if (tapTimeout){clearTimeout(tapTimeout);tapTimeout=null;} if (isWeChatMiniProgram()){toggleWeChatDebug();} else{loadEruda();}}});handleGlobalFunctions();var delayedInit=function (){var isMiniProgram=false;if (config.environment==='miniprogram'){isMiniProgram=true;} else if (config.environment==='web'){isMiniProgram=false;} else if (config.environment==='auto'&&config.autoDetectWechat){isMiniProgram=isWeChatMiniProgram();} if (isMiniProgram){initWeChatDebugState();try{if (typeof wx!=='undefined'&&wx.getStorageSync){var realtimeLogEnabled=wx.getStorageSync('realtime-log-enabled');if (realtimeLogEnabled===true){config.enableRealtimeLog=true;initWeChatRealtimeLog();}}} catch (e){console.warn('恢复实时日志设置失败:',e);}console.log('微信小程序环境已初始化');} else{if (showEruda){loadEruda();} else{printPageInfo();}}};if (typeof requestIdleCallback!=='undefined'){requestIdleCallback(delayedInit,{timeout:1000});} else{setTimeout(delayedInit,0);} return this;};function loadEruda(){if (window.eruda){initEruda();return;}loadScript(config.cdn,function (){initEruda();});} function initEruda(){if (!window.eruda)return;var erudaConfig={};if (config.en try){if (typeof config.en try==='string'){if (config.en try.startsWith('#')){erudaConfig.container=document.querySelector(config.en try);} else{erudaConfig.container=config.en try;}} else{erudaConfig.container=config.en try;}}eruda.init(erudaConfig);if (config.vuePlugin&&window.eruda){loadScript('//cdn.jsdelivr.net/npm/eruda-vue',function (){if (window.erudaVue){eruda.add(erudaVue);}});} if (config.enableWebSocketMonitor&&window.ErudaWebSocketPlugin){eruda.add(window.ErudaWebSocketPlugin(window.eruda));}setTimeout(function (){printPageInfo();eruda.show();},100);} function printPageInfo(){var url=window.location.href;var params=window.location.search;console.log('%c 页面信息 : %c '+url+' ','background: #606060; color: #fff; border-radius: 3px 0 0 3px;','background: #1475B2; color: #fff; border-radius: 0 3px 3px 0;');if (params){console.log('%c URL参数 : %c '+params+' ','background: #606060; color: #fff; border-radius: 3px 0 0 3px;','background: #35495e; color: #fff; border-radius: 0 3px 3px 0;');}} function handleGlobalFunctions(){var originalConsole={log:console.log,info:console.info,warn:console.warn,error:console.error,debug:console.debug};var originalAlert=window.alert;if (config.disableConsole){console.log=console.info=console.warn=console.error=console.debug=function (){};}ErudaManage.enableConsole=function (){console.log=originalConsole.log;console.info=originalConsole.info;console.warn=originalConsole.warn;console.error=originalConsole.error;console.debug=originalConsole.debug;config.disableConsole=false;};ErudaManage.disableConsole=function (){console.log=console.info=console.warn=console.error=console.debug=function (){};config.disableConsole=true;};if (config.disableMenu){window.alert=function (){};}ErudaManage.enableAlert=function (){window.alert=originalAlert;config.disableMenu=false;};ErudaManage.disableAlert=function (){window.alert=function (){};config.disableMenu=true;};} function isWeChatMiniProgram(){try{if (typeof wx!=='undefined'&&typeof wx.getSystemInfo==='function'&&typeof wx.request==='function'&&typeof wx.showToast==='function'){if (typeof window!=='undefined'&&window.__wxjs_environment==='miniprogram'){return true;} if (typeof getCurrentPages==='function'&&typeof getApp==='function'){return true;} if (typeof __wxConfig!=='undefined'&&__wxConfig.accountInfo){return true;}}} catch (e){console.warn('检测微信小程序环境时出错:',e);} return false;} var weChatDebugEnabled=false;function toggleWeChatDebug(){if (!isWeChatMiniProgram()){console.warn('当前不是微信小程序环境,无法使用微信调试功能');return;} try{weChatDebugEnabled=!weChatDebugEnabled;if (typeof wx!=='undefined'&&wx.setEnableDebug){wx.setEnableDebug({enableDebug:weChatDebugEnabled,success:function (res){console.log('微信小程序调试状态已'+(weChatDebugEnabled?'开启':'关闭'));try{if (wx.setStorageSync){wx.setStorageSync('wechat-debug-enabled',weChatDebugEnabled);}} catch (e){console.warn('保存微信调试状态失败:',e);} if (config.enableRealtimeLog&&weChatDebugEnabled){initWeChatRealtimeLog();}},fail:function (err){console.error('设置微信小程序调试状态失败:',err);weChatDebugEnabled=!weChatDebugEnabled;}});} else{console.warn('当前微信小程序版本不支持wx.setEnableDebug方法');weChatDebugEnabled=!weChatDebugEnabled;}} catch (e){console.error('切换微信小程序调试状态时出错:',e);weChatDebugEnabled=!weChatDebugEnabled;}} function initWeChatDebugState(){if (!isWeChatMiniProgram()){return;} try{if (typeof wx!=='undefined'&&wx.getStorageSync){var savedState=wx.getStorageSync('wechat-debug-enabled');if (savedState===true){weChatDebugEnabled=true;if (wx.setEnableDebug){wx.setEnableDebug({enableDebug:true,success:function (){console.log('微信小程序调试状态已恢复');if (config.enableRealtimeLog){initWeChatRealtimeLog();}}});}}}} catch (e){console.warn('初始化微信小程序调试状态失败:',e);}} var realtimeLogManager=null;function initWeChatRealtimeLog(){if (!isWeChatMiniProgram()||!config.enableRealtimeLog){return;} try{if (typeof wx!=='undefined'&&wx.getRealtimeLogManager){realtimeLogManager=wx.getRealtimeLogManager();if (realtimeLogManager){console.log('微信小程序实时日志已初始化');if (config.realtimeLogFilterMsg&&realtimeLogManager.setFilterMsg){realtimeLogManager.setFilterMsg(config.realtimeLogFilterMsg);} if (config.realtimeLogTag&&realtimeLogManager.addFilterMsg){realtimeLogManager.addFilterMsg(config.realtimeLogTag);}ErudaManage.realtimeLog={info:function (){if (realtimeLogManager&&realtimeLogManager.info){realtimeLogManager.info.apply(realtimeLogManager,arguments);}},warn:function (){if (realtimeLogManager&&realtimeLogManager.warn){realtimeLogManager.warn.apply(realtimeLogManager,arguments);}},error:function (){if (realtimeLogManager&&realtimeLogManager.error){realtimeLogManager.error.apply(realtimeLogManager,arguments);}},setFilterMsg:function (msg){if (realtimeLogManager&&realtimeLogManager.setFilterMsg){realtimeLogManager.setFilterMsg(msg);}},addFilterMsg:function (msg){if (realtimeLogManager&&realtimeLogManager.addFilterMsg){realtimeLogManager.addFilterMsg(msg);}}};}} else{console.warn('当前微信小程序版本不支持实时日志功能');}} catch (e){console.error('初始化微信小程序实时日志失败:',e);}}// 启用/禁用微信小程序实时日志 function toggleWeChatRealtimeLog(){if (!isWeChatMiniProgram()){console.warn('当前不是微信小程序环境,无法使用实时日志功能');return;}config.enableRealtimeLog=!config.enableRealtimeLog;if (config.enableRealtimeLog){initWeChatRealtimeLog();console.log('微信小程序实时日志已启用');} else{realtimeLogManager=null;ErudaManage.realtimeLog=null;console.log('微信小程序实时日志已禁用');} try{if (typeof wx!=='undefined'&&wx.setStorageSync){wx.setStorageSync('realtime-log-enabled',config.enableRealtimeLog);}} catch (e){console.warn('保存实时日志设置失败:',e);}} function getParameter(name){var hashMatch=window.location.hash.match(new RegExp('(?:#|&)'+name+'=([^&]*)(&|$)'));if (hashMatch)return decodeURIComponent(hashMatch[1]);var regex=new RegExp("[?&]"+name+"(=([^&#]*)|&|#|$)");var results=regex.exec(window.location.search);if (!results)return null;if (!results[2])return '';return decodeURIComponent(results[2].replace(/\+/g," "));} function loadScript(src,callback){var existingScript=document.querySelector('script[src="'+src+'"]');if (existingScript){if (typeof callback==='function'){if (existingScript.readyState==='complete'||existingScript.readyState==='loaded'){setTimeout(callback,0);} else{existingScript.addEventListener('load',callback);}} return;} var s=document.createElement('script');var r=false;s.type='text/javascript';s.async=true;s.src=src;s.onerror=function (){console.warn('Failed to load script: '+src);if (typeof callback==='function')callback(new Error('Script load failed'));};s.onload=s.onreadystatechange=function (){if (!r&&(!this.readyState||this.readyState==='complete'||this.readyState==='loaded')){r=true;if (typeof callback==='function'){setTimeout(callback,0);}}};var head=document.head||document.getElementsByTagName('head')[0];if (head){head.appendChild(s);} else{var t=document.getElementsByTagName('script')[0];t.parentNode.insertBe fore(s,t);}}ErudaManage.getParameter=getParameter;ErudaManage.loadScript=loadScript;ErudaManage.isWeChatMiniProgram=isWeChatMiniProgram;ErudaManage.toggleWeChatDebug=toggleWeChatDebug;ErudaManage.toggleWeChatRealtimeLog=toggleWeChatRealtimeLog;ErudaManage.initWeChatRealtimeLog=initWeChatRealtimeLog;ErudaManage.updateConfig=function (newConfig){for (var key in newConfig){if (newConfig.hasOwnProperty(key)){config[key]=newConfig[key];}} return config;};ErudaManage.getConfig=function (){return Object.assign({},config);};ErudaManage.getDebugStatus=function (){return{isWeChatMiniProgram:isWeChatMiniProgram(),weChatDebugEnabled:weChatDebugEnabled,realtimeLogEnabled:config.enableRealtimeLog,erudaLoaded:typeof window!=='undefined'&&!!window.eruda,environment:config.environment};};return ErudaManage;})));