From 8bff11cc1094c58770af3c365a0f41215308f2bd Mon Sep 17 00:00:00 2001 From: xu_yanfeng Date: Sun, 12 Jan 2025 17:57:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=BE=E7=A4=BAEngine=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cc-inspector/src/core/types.ts | 6 ++- cc-inspector/src/ga/index.ts | 9 ++++ cc-inspector/src/ga/type.ts | 1 + .../src/scripts/background/portDevtools.ts | 2 +- cc-inspector/src/scripts/const.ts | 1 + cc-inspector/src/scripts/content/index.ts | 26 ++++------- cc-inspector/src/scripts/inject/event.ts | 5 +++ cc-inspector/src/scripts/inject/inspector.ts | 43 ++++++++++++++++--- cc-inspector/src/views/devtools/hierarchy.vue | 24 ++++++++++- .../src/views/devtools/test/server.ts | 1 + 10 files changed, 91 insertions(+), 27 deletions(-) diff --git a/cc-inspector/src/core/types.ts b/cc-inspector/src/core/types.ts index 5798ebe..da46ddc 100644 --- a/cc-inspector/src/core/types.ts +++ b/cc-inspector/src/core/types.ts @@ -1,5 +1,5 @@ import { Chunk } from "../scripts/terminal"; -import { FrameDetails, Info, NodeInfoData, ObjectData, ObjectItemRequestData, TreeData } from "../views/devtools/data"; +import { FrameDetails, Info, NodeInfoData, TreeData } from "../views/devtools/data"; export enum Page { None = "None", @@ -38,6 +38,10 @@ export interface ResponseSupportData { * 消息 */ msg: string; + /** + * engine版本 + */ + version: string; } export type ResponseUpdateFramesData = FrameDetails[]; diff --git a/cc-inspector/src/ga/index.ts b/cc-inspector/src/ga/index.ts index 1d07871..3665d88 100644 --- a/cc-inspector/src/ga/index.ts +++ b/cc-inspector/src/ga/index.ts @@ -14,7 +14,13 @@ export class GoogleAnalytics { } return clientId; } + private isChromeEnv() { + return !!chrome?.storage?.local?.get; + } public async fireEventWithParam(name: GA_EventName, param: string) { + if (!this.isChromeEnv()) { + return; + } const time = Date.now(); const id = await this.getOrCreateSessionId(); fetch(`${GA_ENDPOINT}?measurement_id=${MEASUREMENT_ID}&api_secret=${API_SECRET}`, { @@ -35,6 +41,9 @@ export class GoogleAnalytics { }); } public async fireEvent(name: string) { + if (!this.isChromeEnv()) { + return; + } const time = Date.now(); const id = await this.getOrCreateSessionId(); fetch(`${GA_ENDPOINT}?measurement_id=${MEASUREMENT_ID}&api_secret=${API_SECRET}`, { diff --git a/cc-inspector/src/ga/type.ts b/cc-inspector/src/ga/type.ts index dfa7fcb..48d958e 100644 --- a/cc-inspector/src/ga/type.ts +++ b/cc-inspector/src/ga/type.ts @@ -77,6 +77,7 @@ export enum GA_EventName { MouseMenu = "mouse_menu", Hierarchy = "hierarchy", Inspector = "Inspector", + EngineVersion = "engine_version", } export enum GA_Button { Github = "github", diff --git a/cc-inspector/src/scripts/background/portDevtools.ts b/cc-inspector/src/scripts/background/portDevtools.ts index cc22dd4..44bb537 100644 --- a/cc-inspector/src/scripts/background/portDevtools.ts +++ b/cc-inspector/src/scripts/background/portDevtools.ts @@ -19,7 +19,7 @@ export class PortDevtools extends PortMan { if (port) { port.send(data); } else { - const e = new PluginEvent(Page.Background, Page.Devtools, Msg.ResponseSupport, { support: false, msg: "disconnect with game, please refresh page" } as ResponseSupportData); + const e = new PluginEvent(Page.Background, Page.Devtools, Msg.ResponseSupport, { support: false, msg: "disconnect with game, please refresh page", version: "" } as ResponseSupportData); this.send(e); } } diff --git a/cc-inspector/src/scripts/const.ts b/cc-inspector/src/scripts/const.ts index e5424ac..6a99974 100644 --- a/cc-inspector/src/scripts/const.ts +++ b/cc-inspector/src/scripts/const.ts @@ -7,4 +7,5 @@ export enum DocumentEvent { * 从content到inject的事件 */ Content2Inject = "content2inject", + EngineVersion = "engineVersion", } diff --git a/cc-inspector/src/scripts/content/index.ts b/cc-inspector/src/scripts/content/index.ts index bf9405e..c5feb05 100644 --- a/cc-inspector/src/scripts/content/index.ts +++ b/cc-inspector/src/scripts/content/index.ts @@ -1,7 +1,9 @@ // content.js 和原始界面共享DOM,具有操作dom的能力 // 但是不共享js,要想访问页面js,只能通过注入的方式 import { ChromeConst } from "cc-plugin/src/chrome/const"; -import { debugLog, Msg, Page, PluginEvent, ResponseSupportData } from "../../core/types"; +import { debugLog, Page, PluginEvent } from "../../core/types"; +import { ga } from "../../ga"; +import { GA_EventName } from "../../ga/type"; import { DocumentEvent } from "../const"; import { Terminal } from "../terminal"; @@ -25,6 +27,12 @@ export function injectScript(url: string) { } } +document.addEventListener(DocumentEvent.EngineVersion, async (event: CustomEvent) => { + const version: string = event.detail; + if (version) { + ga.fireEventWithParam(GA_EventName.EngineVersion, version); + } +}); // #region 和Inject通讯 document.addEventListener(DocumentEvent.Inject2Content, (event: CustomEvent) => { let data: PluginEvent = PluginEvent.create(event.detail); @@ -60,20 +68,4 @@ connect.onMessage.addListener((data: PluginEvent, sender: chrome.runtime.Port) = throw new Error(`invalid data: ${data}`); } }); - -function checkGame() { - let gameCanvas = document.querySelector("#GameCanvas"); - const sendData = new PluginEvent(Page.Content, Page.Devtools, Msg.ResponseSupport, { - support: !!gameCanvas, - msg: "", - } as ResponseSupportData); - if (connect) { - connect.postMessage(sendData); - } else { - debugLog && console.log(...terminal.log(`connect is null`)); - throw new Error("connect is null"); - } -} - injectScript(ChromeConst.script.inject); -// checkGame(); diff --git a/cc-inspector/src/scripts/inject/event.ts b/cc-inspector/src/scripts/inject/event.ts index ca8a3e0..1867c61 100644 --- a/cc-inspector/src/scripts/inject/event.ts +++ b/cc-inspector/src/scripts/inject/event.ts @@ -18,4 +18,9 @@ export class InjectEvent { const event = new CustomEvent(DocumentEvent.Inject2Content, { detail }); document.dispatchEvent(event); } + sendEngineVersion(version: string) { + const detail = version; + const event = new CustomEvent(DocumentEvent.EngineVersion, { detail }); + document.dispatchEvent(event); + } } diff --git a/cc-inspector/src/scripts/inject/inspector.ts b/cc-inspector/src/scripts/inject/inspector.ts index 22210bf..bc11ad5 100644 --- a/cc-inspector/src/scripts/inject/inspector.ts +++ b/cc-inspector/src/scripts/inject/inspector.ts @@ -70,16 +70,47 @@ export class Inspector extends InjectEvent { } init() { console.log(...this.terminal.init()); + this.watchIsCocosGame(); + } + private watchIsCocosGame() { + const timer = setInterval(() => { + const b = this._isCocosGame(); + if (b) { + clearInterval(timer); + const version = this.getEngineVersion(); + if (b && version) { + this.uploadEngineVersion(version); + } + } + }, 300); + } + private getEngineVersion() { + if (this._isCocosGame()) { + return cc.ENGINE_VERSION || ""; + } else { + return ""; + } } - notifySupportGame(b: boolean) { - this.sendMsgToContent(Msg.ResponseSupport, { support: b, msg: "" } as ResponseSupportData); + const version = this.getEngineVersion(); + this.sendMsgToContent(Msg.ResponseSupport, { support: b, msg: "", version } as ResponseSupportData); + } + /** + * 防止后台收到大量的Engine版本数据,每次调试只上传一次 + */ + private hasUploadEngineVersion = false; + private uploadEngineVersion(version: string) { + if (this.hasUploadEngineVersion) { + return; + } + if (version) { + this.hasUploadEngineVersion = true; + this.sendEngineVersion(version); + } } - updateTreeInfo() { let isCocosCreatorGame = this._isCocosGame(); if (isCocosCreatorGame) { - //@ts-ignore let scene = cc.director.getScene(); if (scene) { let treeData = new TreeData(); @@ -617,8 +648,8 @@ export class Inspector extends InjectEvent { const data: NodeInfoData = new NodeInfoData(uuid, groupData); this.sendMsgToContent(Msg.ResponseNodeInfo, data as ResponseNodeInfoData); } else { - // 未获取到节点数据 - console.log("未获取到节点数据"); + const data: NodeInfoData = new NodeInfoData(uuid, []); + this.sendMsgToContent(Msg.ResponseNodeInfo, data as ResponseNodeInfoData); } } diff --git a/cc-inspector/src/views/devtools/hierarchy.vue b/cc-inspector/src/views/devtools/hierarchy.vue index 98d89a1..ef681eb 100644 --- a/cc-inspector/src/views/devtools/hierarchy.vue +++ b/cc-inspector/src/views/devtools/hierarchy.vue @@ -1,6 +1,9 @@