Skip to content

Commit d310275

Browse files
committed
🐛 修复firefox csp策略问题 #170
1 parent 3189570 commit d310275

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

src/runtime/background/runtime.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ export default class Runtime extends Manager {
412412
return;
413413
}
414414
const exclude = this.customizeExclude.match(sender.url);
415-
// 自定义排除的
415+
// 自定义排除的, buildScriptRunResource时会将selfMetadata合并,所以后续不需要再处理metadata.exclude,这算是一个隐性的坑,后面看看要不要处理
416416
exclude.forEach((val) => {
417417
addRunScript(sender.tabId!, val, false, 0);
418418
});

src/runtime/background/utils.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import LoggerCore from "@App/app/logger/core";
22
import Logger from "@App/app/logger/logger";
33
import { Channel } from "@App/app/message/channel";
4-
import { Script } from "@App/app/repo/scripts";
4+
import { SCRIPT_STATUS_ENABLE, Script } from "@App/app/repo/scripts";
55
import { isFirefox } from "@App/pkg/utils/utils";
66
import MessageCenter from "@App/app/message/center";
77
import IoC from "@App/app/ioc";
88
import { Request } from "./gm_api";
9+
import Runtime from "./runtime";
910

1011
export const unsafeHeaders: { [key: string]: boolean } = {
1112
// 部分浏览器中并未允许
@@ -173,6 +174,37 @@ export function listenerWebRequest(headerFlag: string) {
173174
chrome.webRequest.onHeadersReceived.addListener(
174175
(details) => {
175176
if (!isExtensionRequest(details)) {
177+
// 判断是否为页面请求
178+
if (!(details.type === "main_frame" || details.type === "sub_frame")) {
179+
return {};
180+
}
181+
// 判断页面上是否有脚本会运行,如果有判断是否有csp,有则移除csp策略
182+
const runtime = IoC.instance(Runtime) as Runtime;
183+
// 这块代码与runtime里的pageLoad一样,考虑后面要不要优化
184+
const result = runtime.matchUrl(details.url, (script) => {
185+
// 如果是iframe,判断是否允许在iframe里运行
186+
if (details.type === "sub_frame") {
187+
if (script.metadata.noframes) {
188+
return true;
189+
}
190+
return script.status !== SCRIPT_STATUS_ENABLE;
191+
}
192+
return script.status !== SCRIPT_STATUS_ENABLE;
193+
});
194+
if (result.length > 0 && details.responseHeaders) {
195+
// 移除csp
196+
for (let i = 0; i < details.responseHeaders.length; i += 1) {
197+
if (
198+
details.responseHeaders[i].name.toLowerCase() ===
199+
"content-security-policy"
200+
) {
201+
details.responseHeaders[i].value = "";
202+
}
203+
}
204+
return {
205+
responseHeaders: details.responseHeaders,
206+
};
207+
}
176208
return {};
177209
}
178210
const appendHeaders: chrome.webRequest.HttpHeader[] = [];

0 commit comments

Comments
 (0)