Skip to content

Commit a62e876

Browse files
authored
✅ example/tests: GM_registerMenuCommand (#1366)
1 parent dd3ac76 commit a62e876

1 file changed

Lines changed: 225 additions & 0 deletions

File tree

example/tests/gm_menu_test.js

Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
// ==UserScript==
2+
// @name GM_registerMenuCommand Example
3+
// @namespace http://tampermonkey.net/
4+
// @version 1.0
5+
// @description Simple demo for GM_registerMenuCommand
6+
// @match *://*/*
7+
// @grant GM_registerMenuCommand
8+
// @grant GM_unregisterMenuCommand
9+
// ==/UserScript==
10+
11+
(async function () {
12+
'use strict';
13+
14+
const checkSubFrameIdSequence = false;
15+
16+
const intervalChanging = false;
17+
18+
const skipClickCheck = false;
19+
20+
let myResolve = () => { };
21+
const waitNext = async () => {
22+
await new Promise((resolve) => {
23+
myResolve = () => { setTimeout(resolve, 50) };
24+
});
25+
};
26+
27+
const waitActions = async (...messages) => {
28+
if (skipClickCheck) return;
29+
messages = messages.flat();
30+
for (const message of messages) {
31+
console.log(message);
32+
await waitNext();
33+
}
34+
};
35+
36+
const isInSubFrame = () => {
37+
38+
try {
39+
return window.top !== window;
40+
} catch {
41+
return true;
42+
}
43+
}
44+
45+
if (intervalChanging) {
46+
// TM: 在打开菜单时,显示会不断改变
47+
let i = 1000;
48+
let p = 0;
49+
setInterval(() => {
50+
if (p) GM_unregisterMenuCommand(p);
51+
i++;
52+
GM_registerMenuCommand(`interval-m-${i}`, () => { console.log(`${i}`); }, {id: "m"});
53+
p = GM_registerMenuCommand(`interval-n-${i}`, () => { console.log(`${i}`); });
54+
}, 1000);
55+
// return;
56+
}
57+
if (checkSubFrameIdSequence) {
58+
const key = Math.floor(Math.random() * 99999 + 99999).toString();
59+
60+
let arr = [];
61+
arr.push(
62+
GM_registerMenuCommand("test", () => { console.log(`${key}-1`); }),
63+
GM_registerMenuCommand("test", () => { console.log(`${key}-2`); }),
64+
GM_registerMenuCommand("test", () => { console.log(`${key}-3`); })
65+
);
66+
if (isInSubFrame()) {
67+
arr.push(GM_registerMenuCommand("test-sub", () => { console.log(`${key}-sub`); }));
68+
} else {
69+
arr.push(GM_registerMenuCommand("test-main", () => { console.log(`${key}-main`); }));
70+
}
71+
arr.push(GM_registerMenuCommand(`test-${location.origin}`, () => { console.log(`${key}-origin`); }));
72+
console.log(`checkSubFrameIdSequence (key=${key}, frame=${isInSubFrame()})`, arr.join("..."));
73+
// return;
74+
}
75+
76+
let obj1 = { id: "abc" };
77+
78+
const r01 = GM_registerMenuCommand("MenuReg abc-1", () => {
79+
80+
console.log("abc-1");
81+
myResolve();
82+
}, obj1);
83+
84+
const r02 = GM_registerMenuCommand("MenuReg abc-2", () => {
85+
86+
console.log("abc-2");
87+
myResolve();
88+
}, obj1);
89+
90+
console.log("abc-1 id === abc", r01 === "abc");
91+
console.log("abc-2 id === abc", r02 === "abc");
92+
93+
// there shall be only "MenuReg abc-2" in the menu.
94+
await waitActions("There shall be only 'MenuReg abc-2'. Click it to continue.");
95+
96+
GM_registerMenuCommand("MenuReg abc-1", () => {
97+
98+
console.log("abc-1.abd");
99+
myResolve();
100+
}, { id: "abd" });
101+
102+
GM_registerMenuCommand("MenuReg abc-2", () => {
103+
104+
console.log("abc-2.abe");
105+
myResolve();
106+
}, { id: "abe" });
107+
108+
109+
// there shall be only "MenuReg abc-1" and "MenuReg abc-2" in the menu.
110+
await waitActions("There shall be 'MenuReg abc-2' and 'MenuReg abc-1'. Click either them to continue.");
111+
112+
113+
GM_registerMenuCommand("MenuReg abc-2", () => {
114+
115+
console.log("abc-2.abf");
116+
myResolve();
117+
}, { id: "abf", accessKey: "h" });
118+
119+
// there shall be only "MenuReg abc-1" and "MenuReg abc-2" in the menu.
120+
await waitActions("There shall be 'MenuReg abc-2', 'MenuReg abc-1' and 'MenuReg abc-2 (H)'. Click either them to continue.");
121+
122+
GM_unregisterMenuCommand("abc");
123+
GM_unregisterMenuCommand("abd");
124+
GM_unregisterMenuCommand("abe");
125+
GM_unregisterMenuCommand("abf");
126+
127+
128+
129+
const p10 = GM_registerMenuCommand("MenuReg D-23", () => {
130+
131+
console.log(110);
132+
myResolve();
133+
}, "b");
134+
135+
136+
const p20 = GM_registerMenuCommand("MenuReg D-23", () => {
137+
138+
console.log(120);
139+
myResolve();
140+
}, "b");
141+
142+
console.log("p10 === 1", p10 === 1);
143+
console.log("p20 === 2", p20 === 2);
144+
145+
// MenuReg D-23 clicking shall give both 110 and 120
146+
await waitActions("Click [MenuReg D-23] -> 110, 120");
147+
148+
149+
const p30 = GM_registerMenuCommand("MenuReg D-26", () => {
150+
151+
console.log(130);
152+
myResolve();
153+
}, { id: "2" });
154+
console.log("p30 === '2'", p30 === "2");
155+
156+
// MenuReg D-23 clicking shall give 110
157+
// MenuReg D-26 clicking shall give 130
158+
159+
await waitActions("Click [MenuReg D-23] -> 110", "Click [MenuReg D-26] -> 130");
160+
161+
162+
const p32 = GM_registerMenuCommand("MenuReg D-26", () => {
163+
164+
console.log(210);
165+
myResolve();
166+
}, { id: 2 });
167+
console.log("p32 === 2", p32 === 2);
168+
169+
// MenuReg D-23 clicking shall give 110
170+
// MenuReg D-26 clicking shall give 210
171+
172+
await waitActions("Click [MenuReg D-23] -> 110", "Click [MenuReg D-26] -> 210");
173+
174+
175+
const p33 = GM_registerMenuCommand("MenuReg D-26", () => {
176+
177+
console.log(220);
178+
myResolve();
179+
}, { id: 3 });
180+
console.log("p33 === 3", p33 === 3);
181+
182+
// MenuReg D-23 clicking shall give 110
183+
// MenuReg D-26 clicking shall give 210 220
184+
185+
await waitActions("Click [MenuReg D-23] -> 110", "Click [MenuReg D-26] -> 210, 220");
186+
187+
188+
189+
const p34 = GM_registerMenuCommand("MenuReg D-26", () => {
190+
191+
console.log(230);
192+
myResolve();
193+
}, { id: "4" });
194+
console.log("p34 === '4'", p34 === "4");
195+
196+
// MenuReg D-23 clicking shall give 110
197+
// MenuReg D-26 clicking shall give 210 220 230
198+
await waitActions("Click [MenuReg D-23] -> 110", "Click [MenuReg D-26] -> 210, 220, 230");
199+
200+
GM_unregisterMenuCommand("4");
201+
202+
203+
// MenuReg D-23 clicking shall give 110
204+
// MenuReg D-26 clicking shall give 210 220
205+
await waitActions("Click [MenuReg D-23] -> 110", "Click [MenuReg D-26] -> 210, 220");
206+
207+
208+
209+
const p40 = GM_registerMenuCommand("MenuReg D-40", () => {
210+
211+
console.log(601);
212+
});
213+
214+
const p50 = GM_registerMenuCommand("MenuReg D-50", () => {
215+
216+
console.log(602);
217+
});
218+
console.log("p40, p50", [p40, p50]); // TM gives 3&4
219+
220+
221+
222+
})().finally(() => {
223+
console.log("finish");
224+
});
225+

0 commit comments

Comments
 (0)