62 lines
1.9 KiB
TypeScript
Raw Normal View History

2021-04-05 18:38:44 +08:00
// content.js 和原始界面共享DOM具有操作dom的能力
// 但是不共享js,要想访问页面js,只能通过注入的方式
2021-04-26 22:27:47 +08:00
import {injectScript} from "@/core/util";
2021-04-28 19:49:26 +08:00
import {Msg, Page, PluginEvent} from "@/core/types";
2021-04-04 20:48:18 +08:00
2021-04-26 22:27:47 +08:00
injectScript("js/inject.js");
2021-04-04 20:48:18 +08:00
2021-11-04 21:01:33 +08:00
class Content {
private connect: chrome.runtime.Port | null = null;
constructor() {
// 接受来自inject.js的消息数据,然后中转到background.js
window.addEventListener("message", (event) => {
let data: PluginEvent = event.data;
if (PluginEvent.check(data, Page.Inject, Page.Content)) {
console.log("[Window-Message]: ", data);
PluginEvent.reset(data, Page.Content, Page.Devtools)
this.connect?.postMessage(data)
}
}, false);
}
// 和background.js保持长连接通讯background和content的交互也要通过这个链接进行通讯
private connectToBackground() {
this.connect = chrome.runtime.connect({name: Page.Content})
this.connect.onMessage.addListener((data: PluginEvent, sender) => {
if (PluginEvent.check(data, Page.Background, Page.Content)) {
// console.log(`%c[Connect-Message] ${JSON.stringify(data)}`, "color:green;")
console.log("[Connect-Message]: ", data);
PluginEvent.reset(data, Page.Content, Page.Inject)
window.postMessage(data, "*");
}
})
}
private sendMessageToBackground(data: PluginEvent) {
if (this.connect) {
this.connect.postMessage(data);
}
2021-04-28 13:59:16 +08:00
}
2021-11-04 21:01:33 +08:00
async run() {
this.connectToBackground();
this.checkGame();
}
private checkGame() {
let gameCanvas = document.querySelector("#GameCanvas");
if (!gameCanvas) {
let sendData = new PluginEvent(Page.Content, Page.Devtools, Msg.Support, {
support: false,
msg: "未发现GameCanvas,不支持调试游戏!"
})
this.sendMessageToBackground(sendData)
}
2021-04-28 13:59:16 +08:00
}
2021-04-04 20:48:18 +08:00
}
2021-11-04 21:01:33 +08:00
const content = new Content();
content.run();