Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "scriptcat",
"version": "1.3.0",
"version": "1.3.1",
"description": "脚本猫,一个可以执行用户脚本的浏览器扩展,万物皆可脚本化,让你的浏览器可以做更多的事情!",
"author": "CodFrm",
"license": "GPLv3",
Expand Down
6 changes: 4 additions & 2 deletions packages/message/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ export const CustomEventClone = CustomEvent;

const performanceClone = (process.env.VI_TESTING === "true" ? new EventTarget() : performance) as Performance;

// 判断当前是否运行在 USER_SCRIPT 环境 (content环境)
export const isContent = typeof chrome === "object" && typeof chrome?.runtime?.sendMessage === "function";
export let isContent: boolean = false;
export const setIsContent = () => {
isContent = true;
};

// 避免页面载入后改动 EventTarget.prototype 的方法导致消息传递失败
export const pageDispatchEvent = performanceClone.dispatchEvent.bind(performanceClone);
Expand Down
7 changes: 5 additions & 2 deletions packages/message/custom_event_message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
createMouseEvent,
} from "@Packages/message/common";
import { ReadyWrap } from "@App/pkg/utils/ready-wrap";
import type { ScriptEnvTag } from "@Packages/message/consts";

// 避免页面载入后改动 Map.prototype 导致消息传递失败
const relatedTargetMap = new Map<number, EventTarget>();
Expand Down Expand Up @@ -41,9 +42,11 @@ export class CustomEventMessage implements Message {
readyWrap: ReadyWrap = new ReadyWrap();

constructor(
messageFlag: string,
protected readonly isInbound: boolean
eventFlag: string,
protected readonly isInbound: boolean,
public readonly envTag: ScriptEnvTag | "" = ""
) {
const messageFlag = `${eventFlag}${envTag}`;
this.receiveFlag = `${messageFlag}${isInbound ? DefinedFlags.inboundFlag : DefinedFlags.outboundFlag}${DefinedFlags.domEvent}`;
this.sendFlag = `${messageFlag}${isInbound ? DefinedFlags.outboundFlag : DefinedFlags.inboundFlag}${DefinedFlags.domEvent}`;
pageAddEventListener(this.receiveFlag, (event: Event) => {
Expand Down
14 changes: 10 additions & 4 deletions src/content.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,22 @@ import { CustomEventMessage } from "@Packages/message/custom_event_message";
import { Server } from "@Packages/message/server";
import { ScriptExecutor } from "./app/service/content/script_executor";
import type { Message } from "@Packages/message/types";
import { getEventFlag, isContent } from "@Packages/message/common";
import { getEventFlag, setIsContent } from "@Packages/message/common";
import { ScriptRuntime } from "./app/service/content/script_runtime";
import { ScriptEnvTag } from "@Packages/message/consts";

if (typeof chrome === "object" && typeof chrome?.runtime?.sendMessage === "function") {
setIsContent();
} else {
console.error("chrome.runtime.sendMessage is not a function in content.js");
}

Comment on lines +11 to +16
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

为什么要这样?这个环境应该是会知道是在content环境吧,也只有content环境会使用这个,而且已经没有地方用isContent了

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

在 common 保留 isContent 來使用。
isContent 只在 content.ts 設置
當然你也可以什麼都不管直接 setIsContent();

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

但是没地方使用了,有需要再说吧,我删除了

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok

const messageFlag = process.env.SC_RANDOM_KEY!;

getEventFlag(messageFlag, (eventFlag: string) => {
const scriptEnvTag = isContent ? ScriptEnvTag.content : ScriptEnvTag.inject;
const scriptEnvTag = ScriptEnvTag.content;

const msg: Message = new CustomEventMessage(`${eventFlag}${scriptEnvTag}`, false);
const msg: Message = new CustomEventMessage(eventFlag, false, scriptEnvTag);

// 初始化日志组件
const logger = new LoggerCore({
Expand All @@ -25,7 +31,7 @@ getEventFlag(messageFlag, (eventFlag: string) => {
logger.logger().debug("content start");

const server = new Server("content", msg);
const scriptExecutor = new ScriptExecutor(msg, new CustomEventMessage(`${eventFlag}${scriptEnvTag}`, true));
const scriptExecutor = new ScriptExecutor(msg, new CustomEventMessage(eventFlag, true, scriptEnvTag));
const runtime = new ScriptRuntime(scriptEnvTag, server, msg, scriptExecutor);
runtime.contentInit();
runtime.init();
Expand Down
8 changes: 4 additions & 4 deletions src/inject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@ import { CustomEventMessage } from "@Packages/message/custom_event_message";
import { Server } from "@Packages/message/server";
import { ScriptExecutor } from "./app/service/content/script_executor";
import type { Message } from "@Packages/message/types";
import { getEventFlag, isContent } from "@Packages/message/common";
import { getEventFlag } from "@Packages/message/common";
import { ScriptRuntime } from "./app/service/content/script_runtime";
import { ScriptEnvTag } from "@Packages/message/consts";

const messageFlag = process.env.SC_RANDOM_KEY!;

getEventFlag(messageFlag, (eventFlag: string) => {
const scriptEnvTag = isContent ? ScriptEnvTag.content : ScriptEnvTag.inject;
const scriptEnvTag = ScriptEnvTag.inject;

const msg: Message = new CustomEventMessage(`${eventFlag}${scriptEnvTag}`, false);
const msg: Message = new CustomEventMessage(eventFlag, false, scriptEnvTag);

// 初始化日志组件
const logger = new LoggerCore({
Expand All @@ -25,7 +25,7 @@ getEventFlag(messageFlag, (eventFlag: string) => {
logger.logger().debug("inject start");

const server = new Server("inject", msg);
const scriptExecutor = new ScriptExecutor(msg, new CustomEventMessage(`${eventFlag}${ScriptEnvTag.content}`, true));
const scriptExecutor = new ScriptExecutor(msg, new CustomEventMessage(eventFlag, true, ScriptEnvTag.content));
const runtime = new ScriptRuntime(scriptEnvTag, server, msg, scriptExecutor);
runtime.init();

Expand Down
2 changes: 1 addition & 1 deletion src/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "__MSG_scriptcat__",
"version": "1.3.0",
"version": "1.3.1",
"author": "CodFrm",
"description": "__MSG_scriptcat_description__",
"options_ui": {
Expand Down
4 changes: 2 additions & 2 deletions src/scripting.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ negotiateEventFlag(messageFlag, 2, (eventFlag) => {

logger.logger().debug("scripting start");

const contentMsg = new CustomEventMessage(`${eventFlag}${ScriptEnvTag.content}`, true);
const injectMsg = new CustomEventMessage(`${eventFlag}${ScriptEnvTag.inject}`, true);
const contentMsg = new CustomEventMessage(eventFlag, true, ScriptEnvTag.content);
const injectMsg = new CustomEventMessage(eventFlag, true, ScriptEnvTag.inject);

const server = new Server("scripting", [contentMsg, injectMsg]);

Expand Down
Loading