彻底修复content莫名断开链接,导致devtool找不到游戏的bug

This commit is contained in:
xu_yanfeng 2025-03-07 15:51:42 +08:00
parent 81d4beaed8
commit 6cb3869a0c
2 changed files with 28 additions and 18 deletions

View File

@ -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);

View File

@ -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);