Skip to content

Commit 3a8c28e

Browse files
authored
📝 配合 ScriptCat 1.3.x 更新 @crontab 例子 (#1323)
* 配合 ScriptCat 1.3.x 更新 `@crontab` 例子 * 修正
1 parent d7c96a5 commit 3a8c28e

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// ==UserScript==
2+
// @name once(...) 示例 - 工作时间内每小时执行一次
3+
// @namespace https://bbs.tampermonkey.net.cn/
4+
// @version 0.1.0
5+
// @description 演示 once(...) 语法:每天 9 时至 17 时期间,每小时执行一次
6+
// @author You
7+
// @crontab * once(9-17) * * *
8+
// @grant GM_log
9+
// @grant GM_xmlhttpRequest
10+
// @connect httpbin.org
11+
// ==/UserScript==
12+
13+
/**
14+
* `once(expr)` 语法说明:
15+
*
16+
* * once(9-17) * * *
17+
* ↑ ↑
18+
* 分 时位
19+
*
20+
* - `once(9-17)` 写在时位:
21+
* - 括号内 `9-17` 是时位的候选值,即只有 9 时至 17 时才会触发
22+
* - `once` 锁定"每小时"这个周期,每小时重置一次
23+
*
24+
* 效果:每天 9:00–17:59,每小时在当小时内第一次命中时执行,共执行 9 次/天。
25+
* 18 时起不再触发,次日 9 时重新开始。
26+
*
27+
* 与 `* 9-17 * * *` 的区别:
28+
* - `* 9-17 * * *` 每小时的每一分钟都执行(共 60×9 = 540 次/天)
29+
* - `* once(9-17) * * *` 每小时只执行一次(共 9 次/天)
30+
*
31+
* 常见用途:工作时间内定期轮询、状态检查、数据同步等。
32+
*/
33+
return new Promise((resolve, reject) => {
34+
const hour = new Date().getHours();
35+
GM_log(`当前时间:${hour} 时,本小时内第一次触发,开始执行……`);
36+
37+
GM_xmlhttpRequest({
38+
url: "https://httpbin.org/get",
39+
method: "GET",
40+
responseType: "json",
41+
anonymous: true,
42+
43+
onload(resp) {
44+
if (resp.status === 200) {
45+
GM_log(`${hour} 时执行成功,本小时内不再重复。`);
46+
resolve("ok");
47+
} else {
48+
reject(`请求失败,状态码:${resp.status}`);
49+
}
50+
},
51+
onerror() {
52+
reject("网络错误,请求失败。");
53+
},
54+
});
55+
});

example/crontab/crontab-once.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// ==UserScript==
2+
// @name once 示例 - 每天只执行一次
3+
// @namespace https://bbs.tampermonkey.net.cn/
4+
// @version 0.1.0
5+
// @description 演示 once 语法:每天在工作时间(9-18点)内第一次触发时执行,当天不再重复
6+
// @author You
7+
// @crontab * 9-18 once * *
8+
// @grant GM_log
9+
// @grant GM_xmlhttpRequest
10+
// @connect httpbin.org
11+
// ==/UserScript==
12+
13+
/**
14+
* `once` 语法说明:
15+
*
16+
* * 9-18 once * *
17+
* ↑ ↑ ↑
18+
* 分 时 日位的 once
19+
*
20+
* - 分位 `*`、时位 `9-18`:每天 9:00–18:59 的每分钟都是候选时间
21+
* - 日位 `once`:在"每天"这个周期内,只允许执行一次
22+
*
23+
* 效果:每天工作时间内,第一次触发时执行;执行成功后,当天剩余时间不再执行。
24+
* 次日 9 点起重置,重新等待第一次触发。
25+
*
26+
* 常见用途:每天定时同步、上报、检查类任务。
27+
*/
28+
return new Promise((resolve, reject) => {
29+
GM_log("今天还没执行过,开始执行……");
30+
31+
GM_xmlhttpRequest({
32+
url: "https://httpbin.org/get",
33+
method: "GET",
34+
responseType: "json",
35+
anonymous: true,
36+
37+
onload(resp) {
38+
if (resp.status === 200) {
39+
GM_log("执行成功,今天不会再运行。");
40+
resolve("ok");
41+
} else {
42+
reject(`请求失败,状态码:${resp.status}`);
43+
}
44+
},
45+
onerror() {
46+
reject("网络错误,请求失败。");
47+
},
48+
});
49+
});

0 commit comments

Comments
 (0)