Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Commit d697928

Browse files
committed
基本实现完成GM API
1 parent 5c0d4a2 commit d697928

File tree

20 files changed

+631
-99
lines changed

20 files changed

+631
-99
lines changed

example/gm_cookie.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// ==UserScript==
2-
// @name New Userscript
2+
// @name GM cookie操作
33
// @namespace https://bbs.tampermonkey.net.cn/
44
// @version 0.1.0
55
// @description 可以控制浏览器的cookie, 必须指定@connect, 并且每次一个新的域调用都需要用户确定
@@ -9,8 +9,6 @@
99
// @connect example.com
1010
// ==/UserScript==
1111

12-
// GM_cookie("store") 方法请看storage_name/gm_value.js的例子, 可用于隐身窗口的操作
13-
1412
GM_cookie("set", {
1513
url: "http://example.com/cookie",
1614
name: "cookie1", value: "value"

example/gm_download.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// ==/UserScript==
1010

1111
GM_download({
12-
url: "https://scriptcat.org/api/v1/gm_crx/download/ScriptCat",
12+
url: "https://scriptcat.org/api/v2/open/crx-download/ndcooeababalnlpkfedmmbbbgkljhpjf",
1313
name: "scriptcat.crx",
1414
headers: {
1515
"referer": "http://www.example.com/",

example/gm_value/gm_value_2.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,8 @@
1313
// @storageName example
1414
// ==/UserScript==
1515

16-
GM_addValueChangeListener("test_set", function (name, oldval, newval, remote, tabid) {
17-
console.log("test_set change", name, oldval, newval, remote, tabid);
18-
// 可以通过tabid获取到触发变化的tab
19-
// GM_cookie.store可以获取到对应的cookie storeId
20-
GM_cookie("store", tabid, (storeId) => {
21-
console.log("store", storeId);
22-
});
16+
GM_addValueChangeListener("test_set", function (name, oldval, newval, remote) {
17+
console.log("test_set change", name, oldval, newval, remote);
2318
});
2419

2520
setInterval(() => {

example/gm_value/gm_value_2_bg.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,8 @@
1414
// ==/UserScript==
1515

1616
return new Promise((resolve) => {
17-
GM_addValueChangeListener("test_set", function (name, oldval, newval, remote, tabid) {
18-
console.log("value change", name, oldval, newval, remote, tabid);
19-
// 可以通过tabid获取到触发变化的tab
20-
// GM_cookie.store可以获取到对应的cookie storeId
21-
GM_cookie("store", tabid, (storeId) => {
22-
console.log("store", storeId);
23-
});
17+
GM_addValueChangeListener("test_set", function (name, oldval, newval, remote) {
18+
console.log("value change", name, oldval, newval, remote);
2419
});
2520

2621
setInterval(() => {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "scriptcat",
3-
"version": "0.17.0-alpha.2",
3+
"version": "0.17.0-alpha.1",
44
"description": "脚本猫,一个可以执行用户脚本的浏览器扩展,万物皆可脚本化,让你的浏览器可以做更多的事情!",
55
"author": "CodFrm",
66
"license": "GPLv3",

packages/message/client.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ export async function sendMessage(msg: MessageSend, action: string, data?: any):
66
LoggerCore.getInstance().logger().trace("sendMessage", { action, data, response: res });
77
if (res && res.code) {
88
console.error(res);
9-
return Promise.reject(res.message);
9+
throw res.message;
1010
} else {
11-
return Promise.resolve(res.data);
11+
return res.data;
1212
}
1313
}
1414

packages/message/server.ts

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -138,20 +138,7 @@ export function forwardMessage(
138138
to: MessageSend,
139139
middleware?: ApiFunctionSync
140140
) {
141-
from.on(path, (params, fromCon) => {
142-
if (middleware) {
143-
// 此处是为了处理CustomEventMessage的同步消息情况
144-
const resp = middleware(params, fromCon) as any;
145-
if (resp instanceof Promise) {
146-
return resp.then((data) => {
147-
if (data !== false) {
148-
return data;
149-
}
150-
});
151-
} else if (resp !== false) {
152-
return resp;
153-
}
154-
}
141+
const handler = (params: any, fromCon: GetSender) => {
155142
const fromConnect = fromCon.getConnect();
156143
if (fromConnect) {
157144
connect(to, prefix + "/" + path, params).then((toCon) => {
@@ -171,5 +158,22 @@ export function forwardMessage(
171158
} else {
172159
return sendMessage(to, prefix + "/" + path, params);
173160
}
161+
};
162+
from.on(path, (params, sender) => {
163+
if (middleware) {
164+
// 此处是为了处理CustomEventMessage的同步消息情况
165+
const resp = middleware(params, sender) as any;
166+
if (resp instanceof Promise) {
167+
return resp.then((data) => {
168+
if (data !== false) {
169+
return data;
170+
}
171+
return handler(params, sender);
172+
});
173+
} else if (resp !== false) {
174+
return resp;
175+
}
176+
return handler(params, sender);
177+
}
174178
});
175179
}

src/app/cache.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ export default class Cache {
116116
ret = await set();
117117
this.set(key, ret);
118118
}
119-
return Promise.resolve(ret);
119+
return ret;
120120
}
121121

122122
public set(key: string, value: any): Promise<void> {
@@ -173,8 +173,9 @@ export default class Cache {
173173
if (value) {
174174
newValue = value;
175175
return this.set(key, value);
176+
} else if (value === undefined) {
177+
return this.del(key);
176178
}
177-
return Promise.resolve();
178179
});
179180
unlock();
180181
return newValue!;

src/app/repo/dao.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ export abstract class DAO<T> {
7575
}
7676
const resp = await this.table.update(id, <any>val);
7777
if (resp) {
78-
return Promise.resolve(id);
78+
return id;
7979
}
80-
return Promise.reject(ErrSaveError);
80+
throw ErrSaveError;
8181
}
8282

8383
public findById(id: number) {

src/app/service/content/content.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export default class ContentRuntime {
3535
setTimeout(() => {
3636
URL.revokeObjectURL(url);
3737
}, 60 * 1000);
38-
return Promise.resolve(url);
38+
return url;
3939
}
4040
case "CAT_fetchBlob": {
4141
return fetch(data.params[0]).then((res) => res.blob());
@@ -80,7 +80,7 @@ export default class ContentRuntime {
8080
return nodeId;
8181
}
8282
}
83-
return Promise.resolve(false);
83+
return false;
8484
}
8585
);
8686
const client = new Client(this.msg, "inject");

0 commit comments

Comments
 (0)