From 6cb3869a0c359e8feba651826471dfd092e6f1f9 Mon Sep 17 00:00:00 2001 From: xu_yanfeng Date: Fri, 7 Mar 2025 15:51:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=BB=E5=BA=95=E4=BF=AE=E5=A4=8Dcontent?= =?UTF-8?q?=E8=8E=AB=E5=90=8D=E6=96=AD=E5=BC=80=E9=93=BE=E6=8E=A5=EF=BC=8C?= =?UTF-8?q?=E5=AF=BC=E8=87=B4devtool=E6=89=BE=E4=B8=8D=E5=88=B0=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/scripts/background/tabInfo.ts | 5 ++++ src/scripts/content/index.ts | 41 +++++++++++++++++-------------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/scripts/background/tabInfo.ts b/src/scripts/background/tabInfo.ts index 5fcbc77..3319fa3 100644 --- a/src/scripts/background/tabInfo.ts +++ b/src/scripts/background/tabInfo.ts @@ -20,6 +20,11 @@ export class TabInfo { let portContent: Content = new Content(tab, port, this); this.contentArray.push(portContent); this.updateFrames(); + // 之前持有的链接会断开,content会重新发起链接,重新连上之后,如果只有一个人链接,需要设置using状态,否则devtools找不到content + if (this.contentArray.length === 1) { + const id = this.contentArray[0].frameID; + this.useFrame(id); + } } public removePort(item: Content) { let index = this.contentArray.findIndex((el) => el === item); diff --git a/src/scripts/content/index.ts b/src/scripts/content/index.ts index 97860f5..cec3a0f 100644 --- a/src/scripts/content/index.ts +++ b/src/scripts/content/index.ts @@ -1,7 +1,7 @@ // content.js 和原始界面共享DOM,具有操作dom的能力 // 但是不共享js,要想访问页面js,只能通过注入的方式 import { ChromeConst } from "cc-plugin/src/chrome/const"; -import { debugLog, Msg, Page, PluginEvent } from "../../core/types"; +import { debugLog, Page, PluginEvent } from "../../core/types"; import { ga } from "../../ga"; import { GA_EventName } from "../../ga/type"; import { DocumentEvent, GoogleAnalyticsData } from "../const"; @@ -65,21 +65,26 @@ document.addEventListener(DocumentEvent.Inject2Content, (event: CustomEvent) => } }); // #region 和background通讯 -let connect: chrome.runtime.Port = chrome.runtime.connect({ name: Page.Content }); -connect.onDisconnect.addListener(() => { - debugLog && console.log(...terminal.disconnect("")); - connect = null; -}); -connect.onMessage.addListener((data: PluginEvent, sender: chrome.runtime.Port) => { - const event = PluginEvent.create(data); - if (event.valid && event.check(Page.Background, Page.Content)) { - debugLog && console.log(...terminal.chunkMessage(event.toChunk())); - event.reset(Page.Content, Page.Inject); - const e = new CustomEvent(DocumentEvent.Content2Inject, { detail: event }); - debugLog && console.log(...terminal.chunkSend(event.toChunk())); - document.dispatchEvent(e); - } else { - throw new Error(`invalid data: ${data}`); - } -}); +let connect: chrome.runtime.Port = null; +function doConnect() { + connect = chrome.runtime.connect({ name: Page.Content }); + connect.onDisconnect.addListener(() => { + debugLog && console.log(...terminal.disconnect("")); + connect = null; + doConnect(); + }); + connect.onMessage.addListener((data: PluginEvent, sender: chrome.runtime.Port) => { + const event = PluginEvent.create(data); + if (event.valid && event.check(Page.Background, Page.Content)) { + debugLog && console.log(...terminal.chunkMessage(event.toChunk())); + event.reset(Page.Content, Page.Inject); + const e = new CustomEvent(DocumentEvent.Content2Inject, { detail: event }); + debugLog && console.log(...terminal.chunkSend(event.toChunk())); + document.dispatchEvent(e); + } else { + throw new Error(`invalid data: ${data}`); + } + }); +} +doConnect(); injectScript(ChromeConst.script.inject);