Skip to content

Commit 5da21b5

Browse files
committed
🐛 修复脚本注入CSP问题 #739 #728
1 parent 66ab70f commit 5da21b5

1 file changed

Lines changed: 13 additions & 28 deletions

File tree

src/app/service/service_worker/runtime.ts

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,6 @@ export class RuntimeService {
471471
// 获取content.js和inject.js的脚本注册信息
472472
async getContentAndInjectScript() {
473473
// 黑名单排除
474-
475474
const blacklist = this.blacklist;
476475
const excludeMatches = [];
477476
const excludeGlobs = [];
@@ -506,21 +505,17 @@ export class RuntimeService {
506505
}
507506
}
508507

509-
const res = {} as {
510-
content: chrome.scripting.RegisteredContentScript;
511-
inject: chrome.userScripts.RegisteredUserScript | null;
512-
};
513-
514-
// content.js
515-
const script: chrome.scripting.RegisteredContentScript = {
508+
const retScript: chrome.userScripts.RegisteredUserScript[] = [];
509+
retScript.push({
516510
id: "scriptcat-content",
517-
js: ["src/content.js"],
511+
js: [{ file: "src/content.js" }],
518512
matches: ["<all_urls>"],
519513
allFrames: true,
520514
runAt: "document_start",
515+
world: "USER_SCRIPT",
521516
excludeMatches,
522-
};
523-
res.content = script;
517+
excludeGlobs,
518+
});
524519

525520
// inject.js
526521
const injectJs = await this.getInjectJsCode();
@@ -529,10 +524,10 @@ export class RuntimeService {
529524
excludeMatches,
530525
excludeGlobs,
531526
});
532-
res.inject = script;
527+
retScript.push(script);
533528
}
534529

535-
return res;
530+
return retScript;
536531
}
537532

538533
// 如果是重复注册,需要先调用 unregisterUserscripts
@@ -556,22 +551,12 @@ export class RuntimeService {
556551
console.error("chrome.userScripts.resetWorldConfiguration() failed.", e);
557552
}
558553

559-
const [particularScriptList, generalScriptList] = await Promise.all([
560-
// registerScripts
561-
this.getParticularScriptList(),
562-
// content.js, inject.js
563-
this.getContentAndInjectScript(),
564-
]);
565-
566-
const list = [...particularScriptList, generalScriptList.inject!];
554+
const particularScriptList = await this.getParticularScriptList();
555+
// getContentAndInjectScript依赖loadScriptMatchInfo
556+
// 需要等getParticularScriptList完成后再执行
557+
const generalScriptList = await this.getContentAndInjectScript();
567558

568-
// 注册 content.js
569-
const contentScript: chrome.scripting.RegisteredContentScript = generalScriptList.content;
570-
try {
571-
await chrome.scripting.registerContentScripts([contentScript]);
572-
} catch (e: any) {
573-
this.logger.error("register content.js error", Logger.E(e));
574-
}
559+
const list: chrome.userScripts.RegisteredUserScript[] = [...particularScriptList, ...generalScriptList];
575560

576561
try {
577562
await chrome.userScripts.register(list);

0 commit comments

Comments
 (0)