From 52f6dcce3db6fb4ec6e4ef43f5c4e65dcf460727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E9=9C=96=E9=93=83?= Date: Sun, 14 Dec 2025 09:11:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(router):=20=E5=A2=9E=E5=BC=BA=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E7=BB=84=E4=BB=B6=E5=8A=A0=E8=BD=BD=E9=80=BB=E8=BE=91?= =?UTF-8?q?=201.=20=E4=BF=AE=E6=94=B9=E5=8D=B8=E8=BD=BDtimer=E3=80=81event?= =?UTF-8?q?=E3=80=81script=E7=9A=84=E9=80=BB=E8=BE=91=202.=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=8A=A0=E8=BD=BDscript=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sidepanel/js/components/BaseComponet.js | 6 +-- sidepanel/js/utils/eventManager.js | 61 ++++++++++++++----------- sidepanel/js/utils/scriptManager.js | 3 +- sidepanel/js/utils/timerManager.js | 18 ++++++-- sidepanel/modules/Router.js | 25 +++++----- 5 files changed, 63 insertions(+), 50 deletions(-) diff --git a/sidepanel/js/components/BaseComponet.js b/sidepanel/js/components/BaseComponet.js index 18d3ecd..306cacd 100644 --- a/sidepanel/js/components/BaseComponet.js +++ b/sidepanel/js/components/BaseComponet.js @@ -58,9 +58,9 @@ export class BaseComponent { * 销毁组件 */ destroy() { - this._eventManager.removeAll(); - this._timerManager.cleanAll(); - this._scriptManager.unloadScript().then(r => console.log(r)); + this._eventManager.removeAll().then(() => console.log('clean event successful')); + this._timerManager.cleanAll().then(() => console.log('clean timer successful')); + this._scriptManager.unloadScript().then(r => console.log('unload script successful')); console.log('destroy success'); } } diff --git a/sidepanel/js/utils/eventManager.js b/sidepanel/js/utils/eventManager.js index 03ec2d8..83d8e99 100644 --- a/sidepanel/js/utils/eventManager.js +++ b/sidepanel/js/utils/eventManager.js @@ -1,32 +1,41 @@ -export class EventManager { - constructor() { - this.listeners = []; - } +export class EventManager { + constructor() { + this.listeners = []; + } - add(ele, type, handler, options) { - ele.addEventListener(type, handler, options); - this.listeners.push({ ele, type, handler, options }); - } + add(ele, type, handler, options) { + ele.addEventListener(type, handler, options); + this.listeners.push({ele, type, handler, options}); + } - remove(ele, type, handler, options) { - ele.removeEventListener(type, handler, options); - this.listeners = this.listeners.filter( - (listener) => - listener.ele !== ele || - listener.type !== type || - listener.handler !== handler || - listener.options !== options - ); - } + remove(ele, type, handler, options) { + ele.removeEventListener(type, handler, options); + this.listeners = this.listeners.filter( + (listener) => + listener.ele !== ele || + listener.type !== type || + listener.handler !== handler || + listener.options !== options + ); + } - removeAll() { + removeAll() { + return new Promise((resolve, reject) => { + this.listeners.onload = () => { this.listeners.forEach((listener) => { - listener.ele.removeEventListener( - listener.type, - listener.handler, - listener.options - ); + listener.ele.removeEventListener( + listener.type, + listener.handler, + listener.options + ); }); - this.listeners = []; - } + resolve(); + }; + this.listeners.onerror = () => { + console.error('unload event error'); + reject(); + }; + this.listeners = []; + }); + } } \ No newline at end of file diff --git a/sidepanel/js/utils/scriptManager.js b/sidepanel/js/utils/scriptManager.js index 55a37d3..25a0efe 100644 --- a/sidepanel/js/utils/scriptManager.js +++ b/sidepanel/js/utils/scriptManager.js @@ -51,13 +51,12 @@ export class ScriptManager { }; s.onerror = () => { reject(new Error(`Failed to load script: ${path}`)); - } + }; document.body.appendChild(s); }); } async unloadScript() { - console.log('unloadScript'); if (this.currentScriptEl) { try { this.currentScriptEl.remove(); diff --git a/sidepanel/js/utils/timerManager.js b/sidepanel/js/utils/timerManager.js index b339052..880ddb2 100644 --- a/sidepanel/js/utils/timerManager.js +++ b/sidepanel/js/utils/timerManager.js @@ -45,11 +45,19 @@ export class TimerManager { } cleanAll() { - console.log('cleanAll time or interval'); - this.timers.forEach((timerId) => { - window.clearTimeout(timerId); - window.clearInterval(timerId); + return new Promise((resolve, reject) => { + this.timers.onload = () => { + this.timers.forEach((timerId) => { + window.clearTimeout(timerId); + window.clearInterval(timerId); + }); + resolve(); + }; + this.timers.onerror = () => { + console.log('unload timer error'); + reject(); + } + this.timers = []; }); - this.timers = []; } } diff --git a/sidepanel/modules/Router.js b/sidepanel/modules/Router.js index ab88bde..aced5bd 100644 --- a/sidepanel/modules/Router.js +++ b/sidepanel/modules/Router.js @@ -85,21 +85,18 @@ class Router { } console.log('加载组件', route.name); - console.log(route.script); - if (route.script) { - const tmp = await this.scriptManager.loadScript({ - path: route.script, - name: route.name, - isModule: route.isModule, - deps: route.deps, - }); - console.log(tmp); - if (tmp) { - console.log('加载组件成功', route.name); - } + if (!route.script) { + return; } + await this.scriptManager.loadScript({ + path: route.script, + name: route.name, + isModule: route.isModule, + deps: route.deps, + }); + const newInstance = await this.scriptManager.getComponentInstance(route.name); console.log(newInstance); if (newInstance) { @@ -114,7 +111,7 @@ class Router { }; if (this.beforeFun) { - this.beforeFun({ to: route, next: doChange }); + this.beforeFun({to: route, next: doChange}); } else { doChange().then(r => r); } @@ -143,4 +140,4 @@ class Router { } } -export { Router }; +export {Router};