File tree Expand file tree Collapse file tree 3 files changed +104
-0
lines changed
Expand file tree Collapse file tree 3 files changed +104
-0
lines changed Original file line number Diff line number Diff line change 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+ } ) ;
Original file line number Diff line number Diff line change 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+ } ) ;
File renamed without changes.
You can’t perform that action at this time.
0 commit comments