Skip to content

Commit 89d961c

Browse files
committed
feat: force-copy setup scripts
1 parent 1ca73dd commit 89d961c

File tree

5 files changed

+63
-5
lines changed

5 files changed

+63
-5
lines changed

packages/force-copy/src/content/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ import { onPopupMessage } from "./channel/popup";
44
import { LOG_LEVEL, logger } from "@/utils/logger";
55
import { initializeWorker } from "./runtime/initialize";
66
import { isInIframe } from "@/utils/is";
7-
import { implantScript } from "./runtime/script";
7+
import { importScript } from "./runtime/script";
88

99
(() => {
1010
if (__DEV__) {
1111
!isInIframe && onReceiveReloadMsg();
1212
logger.setLevel(LOG_LEVEL.INFO);
1313
}
1414
logger.info("Content Script Loaded");
15-
implantScript();
15+
importScript();
1616
!isInIframe && initializeWorker();
1717
PCBridge.onPopupMessage(onPopupMessage);
1818
})();

packages/force-copy/src/manifest/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const __MANIFEST__: Record<string, unknown> = {
3737
service_worker: "worker.js",
3838
},
3939
host_permissions: [...__URL_MATCH__],
40-
permissions: ["activeTab", "tabs", "scripting"],
40+
permissions: ["activeTab", "tabs", "scripting", "management"],
4141
minimum_chrome_version: "88.0",
4242
};
4343

@@ -61,6 +61,7 @@ if (process.env.PLATFORM === "gecko") {
6161
"tabs",
6262
"webRequest",
6363
"webRequestBlocking",
64+
"management",
6465
...__URL_MATCH__,
6566
];
6667
__MANIFEST__.browser_specific_settings = {
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { LOG_LEVEL, logger } from "@/utils/logger";
2-
import { implantScript } from "./runtime/script";
2+
import { importScript } from "./runtime/script";
33
import { CWBridge } from "@/bridge/content-worker";
44
import { onContentMessage } from "./channel/content";
5+
import { initializeEvents } from "./runtime/initialize";
56

67
(() => {
78
if (__DEV__) {
89
logger.setLevel(LOG_LEVEL.INFO);
910
}
10-
implantScript();
11+
importScript();
12+
initializeEvents();
1113
CWBridge.onContentMessage(onContentMessage);
1214
})();
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { URL_MATCH } from "@/utils/constant";
2+
import { cross } from "@/utils/global";
3+
import { logger } from "@/utils/logger";
4+
import { NOOP } from "../utils/constant";
5+
6+
export const initializeEvents = () => {
7+
const onSetup = () => {
8+
logger.info("Register Inject Scripts On Setup");
9+
cross.tabs.query({}).then(tabs => {
10+
for (const tab of tabs) {
11+
const tabId = tab && tab.id;
12+
const tabURL = tab && tab.url;
13+
if (!tabId || !tabURL) continue;
14+
if (!URL_MATCH.some(match => new RegExp(match).test(tabURL))) {
15+
continue;
16+
}
17+
// #IFDEF CHROMIUM
18+
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript
19+
cross.scripting.executeScript({
20+
target: { tabId: tabId, allFrames: true },
21+
files: ["content.js"],
22+
injectImmediately: true,
23+
});
24+
cross.scripting.executeScript({
25+
target: { tabId: tabId, allFrames: true },
26+
files: [process.env.INJECT_FILE + ".js"],
27+
injectImmediately: true,
28+
world: "MAIN",
29+
});
30+
// #ENDIF
31+
// #IFDEF GECKO
32+
// https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript
33+
cross.tabs
34+
.executeScript(tabId, {
35+
allFrames: true,
36+
file: process.env.INJECT_FILE + ".js",
37+
})
38+
.catch(NOOP);
39+
cross.tabs
40+
.executeScript(tabId, {
41+
allFrames: true,
42+
file: "content.js",
43+
})
44+
.catch(NOOP);
45+
// #ENDIF
46+
}
47+
});
48+
};
49+
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onInstalled
50+
cross.runtime.onInstalled.addListener(onSetup);
51+
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/management/onEnabled
52+
cross.management.onEnabled.addListener(onSetup);
53+
};

packages/force-copy/src/worker/utils/constant.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@ export const CODE_SUFFIX = [
1010
` script.remove();`,
1111
`}`,
1212
].join("\n");
13+
14+
export const NOOP = () => null;

0 commit comments

Comments
 (0)