Skip to content

Commit f698722

Browse files
committed
🐛 修复GM_addValueChangeListener问题 #404
1 parent 6c9cbf1 commit f698722

3 files changed

Lines changed: 36 additions & 4 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// ==UserScript==
2+
// @name gm value listener change
3+
// @namespace https://bbs.tampermonkey.net.cn/
4+
// @version 0.1.0
5+
// @description 监听脚本数据变更
6+
// @author You
7+
// @match https://bbs.tampermonkey.net.cn/
8+
// @run-at document-start
9+
// @grant GM_getValue
10+
// @grant GM_addValueChangeListener
11+
// @grant GM_listValues
12+
// @grant GM_setValue
13+
// ==/UserScript==
14+
15+
GM_addValueChangeListener("test_set", function (name, oldval, newval, remote) {
16+
console.log("test_set change", name, oldval, newval, remote);
17+
});
18+
19+
setInterval(() => {
20+
console.log("test_set: ", GM_getValue("test_set"));
21+
console.log("value list:", GM_listValues());
22+
GM_setValue("test_set", (new Date()).getTime());
23+
}, 2000);

src/app/service/content/gm_api.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import LoggerCore from "@App/app/logger/core";
88
import { connect, sendMessage } from "@Packages/message/client";
99
import EventEmitter from "eventemitter3";
1010
import { getStorageName } from "@App/pkg/utils/utils";
11+
import { MessageRequest } from "../service_worker/gm_api";
1112

1213
interface ApiParam {
1314
depend?: string[];
@@ -74,7 +75,8 @@ export default class GMApi {
7475
uuid: this.scriptRes.uuid,
7576
api,
7677
params,
77-
});
78+
runFlag: this.runFlag,
79+
} as MessageRequest);
7880
}
7981

8082
// 长连接使用,connect只用于接受消息,不发送消息
@@ -83,7 +85,8 @@ export default class GMApi {
8385
uuid: this.scriptRes.uuid,
8486
api,
8587
params,
86-
});
88+
runFlag: this.runFlag,
89+
} as MessageRequest);
8790
}
8891

8992
public valueUpdate(data: ValueUpdateData) {

src/app/service/service_worker/value.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export class ValueService {
4646
const storageName = getStorageName(script);
4747
let oldValue;
4848
// 使用事务来保证数据一致性
49-
await Cache.getInstance().tx("setValue:" + storageName, async () => {
49+
const flag = await Cache.getInstance().tx("setValue:" + storageName, async () => {
5050
const valueModel = await this.valueDAO.get(storageName);
5151
if (!valueModel) {
5252
await this.valueDAO.save(storageName, {
@@ -57,6 +57,10 @@ export class ValueService {
5757
updatetime: Date.now(),
5858
});
5959
} else {
60+
// 值没有发生变化, 不进行操作
61+
if (valueModel.data[key] === value) {
62+
return false;
63+
}
6064
oldValue = valueModel.data[key];
6165
if (value === undefined) {
6266
delete valueModel.data[key];
@@ -67,7 +71,9 @@ export class ValueService {
6771
}
6872
return true;
6973
});
70-
this.pushValueToTab(oldValue, key, value, uuid, storageName, sender);
74+
if (flag) {
75+
this.pushValueToTab(oldValue, key, value, uuid, storageName, sender);
76+
}
7177
}
7278

7379
// 推送值到tab

0 commit comments

Comments
 (0)