Skip to content

Commit ca6324d

Browse files
committed
🐛 修复GM.* API问题 #363
1 parent 2988176 commit ca6324d

2 files changed

Lines changed: 27 additions & 10 deletions

File tree

src/app/service/content/gm_api.ts

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ export class GMContext {
2424
public static API(param: ApiParam = {}) {
2525
return (target: any, propertyName: string, descriptor: PropertyDescriptor) => {
2626
const key = propertyName;
27-
if (key === "GMdotXmlHttpRequest") {
28-
GMContext.apis.set("GM.xmlHttpRequest", {
27+
if (key === "GMDotGetResourceUrl") {
28+
GMContext.apis.set("GM.getResourceUrl", {
2929
api: descriptor.value,
3030
param,
3131
});
@@ -36,11 +36,13 @@ export class GMContext {
3636
param,
3737
});
3838
// 兼容GM.*
39-
const dot = key.replace("_", ".");
39+
let dot = key.replace("_", ".");
4040
if (dot !== key) {
41-
// 特殊处理GM.xmlHttpRequest
42-
if (dot === "GM.xmlhttpRequest") {
43-
return;
41+
// 特殊处理GM.*一些大小写不一致的情况
42+
switch (dot) {
43+
case "GM.xmlhttpRequest":
44+
dot = "GM.xmlHttpRequest";
45+
break;
4446
}
4547
GMContext.apis.set(dot, {
4648
api: descriptor.value,
@@ -58,10 +60,7 @@ export default class GMApi {
5860

5961
valueChangeListener = new Map<number, { name: string; listener: GMTypes.ValueChangeListener }>();
6062

61-
constructor(
62-
private prefix: string,
63-
private message: Message
64-
) {}
63+
constructor(private prefix: string, private message: Message) {}
6564

6665
// 单次回调使用
6766
public sendMessage(api: string, params: any[]) {
@@ -792,4 +791,21 @@ export default class GMApi {
792791
}
793792
return undefined;
794793
}
794+
795+
// GM_getResourceURL的异步版本,用来兼容GM.getResourceUrl
796+
@GMContext.API()
797+
GMDotGetResourceUrl(name: string, isBlobUrl?: boolean): Promise<string | undefined> {
798+
console.log("GMDotGetResourceUrl", name, isBlobUrl);
799+
if (!this.scriptRes.resource) {
800+
return Promise.resolve(undefined);
801+
}
802+
const r = this.scriptRes.resource[name];
803+
if (r) {
804+
if (isBlobUrl) {
805+
return Promise.resolve(URL.createObjectURL(base64ToBlob(r.base64)));
806+
}
807+
return Promise.resolve(r.base64);
808+
}
809+
return Promise.resolve(undefined);
810+
}
795811
}

src/app/service/service_worker/gm_api.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,7 @@ export default class GMApi {
543543
permissionContent: i18next.t("domain"),
544544
} as ConfirmParam);
545545
},
546+
alias: ["GM.xmlHttpRequest"],
546547
})
547548
async GM_xmlhttpRequest(request: Request, sender: GetSender) {
548549
if (request.params.length === 0) {

0 commit comments

Comments
 (0)