Auto Reload

网页定时自动刷新

当前为 2020-12-15 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Auto Reload
  3. // @name:zh-CN 自动刷新
  4. // @namespace http://tampermonkey.net/
  5. // @description 网页定时自动刷新
  6. // @description:zh-CN 网页定时自动刷新
  7. // @author XVCoder
  8. // @license GPL-3.0-only
  9. // @create 2020-11-20
  10. // @lastmodified 2020-11-23
  11. // @version 0.9
  12. // @match http*://*/*
  13. // @icon https://xnu132.win/assets/img/favicon.png
  14. // @require https://cdn.staticfile.org/vue/2.6.11/vue.js
  15. // @require https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js
  16. // @note 2020-11-23 v0.9 修复 倒计时bug
  17. // @note 2020-11-21 v0.8 优化 显示效果
  18. // @note 2020-11-20 v0.7 修改 信息完善,脚本源迁移到GitHub
  19. // @note 2020-11-20 v0.6 修改 默认匹配所有网页,修改match以指定需要自动刷新的网页
  20. // @note 2020-11-20 v0.5 新增 实现基本功能
  21. // @home-url https://gf.qytechs.cn/zh-CN/scripts/416449-auto-reload
  22. // @home-url2 https://github.com/XVCoder/UserScripts/AutoReload
  23. // @homepageURL https://gf.qytechs.cn/zh-CN/scripts/416449-auto-reload
  24. // @grant GM_getValue
  25. // @grant GM.getValue
  26. // @grant GM_setValue
  27. // @grant GM.setValue
  28. // ==/UserScript==
  29.  
  30. !function () {
  31. let isdebug = false;//是否为调试模式
  32. let isLocalDebug = isdebug || false;
  33. //调试模式时,使用「debug("message");」输出到Console中
  34. let debug = isdebug ? console.log.bind(console) : function () {
  35. };
  36. if (typeof (GM) === "undefined") {
  37. // 这个是ViolentMonkey的支持选项
  38. GM = {};
  39. GM.setValue = GM_setValue;
  40. GM.getValue = GM_getValue;
  41. }
  42. //默认配置
  43. let DefaultConfig = { countDown:1, selectedOption:5 };
  44. //可重载的配置文件
  45. let DBConfig = {};
  46. debug("============ Auto Load Start============");
  47. (function () {
  48. let needDisplayNewFun = true; // 本次更新是否有新功能需要展示
  49. if (window.NodeList && !NodeList.prototype.forEach) {
  50. NodeList.prototype.forEach = function (callback, thisArg) {
  51. thisArg = thisArg || window;
  52. for (var i = 0; i < this.length; i++) {
  53. callback.call(thisArg, this[i], i, this);
  54. }
  55. };
  56. }
  57. /**初始化所有的设置**/
  58. Promise.all([GM.getValue("Config")]).then(function (data) {
  59. if (data[0] != null) {
  60. DBConfig = JSON.parse(data[0]);
  61. }else{
  62. DBConfig = DefaultConfig;
  63. }
  64. callback();
  65. }).catch(function (except) {
  66. console.log(except);
  67. });
  68. function callback(){
  69. //=============================================== 固定配置项 ↓↓↓↓↓
  70. //选项被选中时的标志
  71. let optSelectedMark = "✔";//✔
  72. //重载提示
  73. let reloadHint = "reload: ";//
  74. //播放符号
  75. let playMark = "▶";
  76. //暂停符号
  77. let pauseMark = "❙❙";
  78. //显示符号
  79. let visibleMark = "❮";//⍇⇱❮
  80. //隐藏符号
  81. let unvisibleMark = "❯";//⍈⇲❯
  82. //设置符号
  83. let settingMark = "⚙";//🕓⏱🛠⚙
  84. //设置选项圆角曲率(默认5)
  85. let settingOptsRadius = 3;
  86. //设置菜单宽度(单位px;默认45)
  87. let settingMenuWidth = 45;
  88. //用户脚本加载等待时间
  89. let loadTime = 200;
  90. //倒计时选项(时长:min)
  91. let opts = {
  92. opt1: 5,
  93. opt2: 4,
  94. opt3: 3,
  95. opt4: 2,
  96. opt5: 1
  97. }
  98. //倒计时选项显示内容
  99. let optsDisplay = {
  100. opt1: opts.opt1 + "min ",
  101. opt2: opts.opt2 + "min ",
  102. opt3: opts.opt3 + "min ",
  103. opt4: opts.opt4 + "min ",
  104. opt5: opts.opt5 + "min ",
  105. };
  106. //=============================================== 固定配置项 ↑↑↑↑↑
  107. //页面重新加载倒计时(秒)
  108. let seconds = DBConfig.countDown * 60;
  109. //计时器
  110. let timer = null;
  111. //显示当前倒计时选项的配置
  112. switch(DBConfig.selectedOption) {
  113. case 1: {
  114. //option1
  115. optsDisplay.opt1 += optSelectedMark;
  116. break;
  117. }
  118. case 2: {
  119. //option2
  120. optsDisplay.opt2 += optSelectedMark;
  121. break;
  122. }
  123. case 3: {
  124. //option3
  125. optsDisplay.opt3 += optSelectedMark;
  126. break;
  127. }
  128. case 4: {
  129. //option4
  130. optsDisplay.opt4 += optSelectedMark;
  131. break;
  132. }
  133. case 5: {
  134. //option5
  135. optsDisplay.opt5 += optSelectedMark;
  136. break;
  137. }
  138. default:
  139. break;
  140. }
  141.  
  142. setTimeout(function () {
  143. //===============================================================附加样式表=======================================================================
  144. var style = document.createElement("style");
  145. style.innerHTML =
  146. ''
  147. + '.leftTime {color:#00000077;font-size:12px;position:absolute;bottom:0px;right:25px;}'
  148. + '.pauseBtn {position:absolute;bottom:0px;right:100px;background:transparent;display:inline-block;cursor:pointer;color:#666666;font-family:Arial;font-size:8px;font-weight:bold;padding:0px 1px;text-decoration:none;}'
  149. + '.xDropdown {position:absolute;bottom:0px;right:120px;background:transparent;display:inline-block;}'
  150. + '.settingBtn {cursor:pointer;color:#666666;line-height:17px;font-family:Arial;font-size:14px;font-weight:bold;text-decoration:none;cursor:pointer;}'
  151. + '.xDropdown-content {display:none;position:absolute;border-radius:'+settingOptsRadius+'px;background-color:#f9f9f9;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);}'
  152. + '.xDropdown-content div {-moz-user-select:none;-webkit-user-select:none;user-select:none;min-width:'+settingMenuWidth+'px;padding:2px 10px 2px 14px;border-radius:'+settingOptsRadius+'px;font-family:Arial;font-size:10px;corlor:00000077;text-decoration:none;display:block;cursor:arror;}'
  153. + '.xDropdown-content div:hover {background-color:#B1B1B1;color:white}'
  154. + '.xDropdown:hover .xDropdown-content {display:block;bottom:15px}'
  155. + '.xDropdown:hover .settingBtn {color:orange;}'
  156. + '.hiddenBtn {position:absolute;bottom:0px;right:140px;background:transparent;display:inline-block;cursor:pointer;color:#666666;font-family:Arial;font-size:8px;padding:0px 1px;text-decoration:none;}'
  157. + ''
  158. ;
  159. document.getElementsByTagName('HEAD').item(0).appendChild(style);
  160.  
  161. //================================================================附加元素========================================================================
  162. //倒计时标签
  163. let leftTimeDiv = document.createElement("div");
  164. leftTimeDiv.setAttribute("id", "leftTime");
  165. leftTimeDiv.className = "leftTime";
  166. leftTimeDiv.innerHTML = reloadHint+Math.floor(seconds/60).toString().padStart(2,'0')+":"+(seconds%60).toString().padStart(2,'0');
  167. document.body.appendChild(leftTimeDiv);
  168. //[暂停/继续]按钮
  169. let pauseBtn = document.createElement("div");
  170. pauseBtn.setAttribute("id", "pauseBtn");
  171. pauseBtn.className = "pauseBtn";
  172. pauseBtn.innerHTML = pauseMark;
  173. document.body.appendChild(pauseBtn);
  174. //下拉菜单区域
  175. let xDropdownDiv = document.createElement("div");
  176. xDropdownDiv.setAttribute("id", "xDropdown");
  177. xDropdownDiv.className = "xDropdown";
  178. document.body.appendChild(xDropdownDiv);
  179. //下拉菜单主体
  180. let xDropdownContentDiv = document.createElement("div");
  181. xDropdownContentDiv.setAttribute("id", "xDropdown-content");
  182. xDropdownContentDiv.className = "xDropdown-content";
  183. xDropdownContentDiv.innerHTML =
  184. ""
  185. + "<div id='opt1'>" + optsDisplay.opt1 + "</div>"
  186. + "<div id='opt2'>" + optsDisplay.opt2 + "</div>"
  187. + "<div id='opt3'>" + optsDisplay.opt3 + "</div>"
  188. + "<div id='opt4'>" + optsDisplay.opt4 + "</div>"
  189. + "<div id='opt5'>" + optsDisplay.opt5 + "</div>"
  190. + "";
  191. xDropdownContentDiv.style.visibility = "hidden";
  192. xDropdownDiv.appendChild(xDropdownContentDiv);
  193. //设置按钮
  194. let settingBtn = document.createElement("div");
  195. settingBtn.setAttribute("id", "settingBtn");
  196. settingBtn.className = "settingBtn";
  197. settingBtn.style.visibility = "hidden";
  198. settingBtn.innerHTML = settingMark;
  199. xDropdownDiv.appendChild(settingBtn);
  200. //显示/隐藏按钮
  201. let hiddenBtn = document.createElement("div")
  202. hiddenBtn.setAttribute("id", "hiddenBtn");
  203. hiddenBtn.className = "hiddenBtn";
  204. hiddenBtn.style.visibility = "hidden";
  205. hiddenBtn.innerHTML = unvisibleMark;
  206. document.body.appendChild(hiddenBtn);
  207.  
  208. //================================================================事件========================================================================
  209. //倒计时刷新
  210. timer = setInterval(function(){
  211. if(seconds<=0){
  212. //倒计时结束,重载页面
  213. location.reload();
  214. }else{
  215. seconds--;
  216. document.getElementById("leftTime").innerHTML=reloadHint+Math.floor(seconds/60).toString().padStart(2,'0')+":"+(seconds%60).toString().padStart(2,'0');
  217. }
  218. },1000);
  219.  
  220. //显示隐藏按钮点击事件
  221. document.getElementById("hiddenBtn").addEventListener("click", (function(){
  222. if(hiddenBtn.innerHTML == unvisibleMark)
  223. {//隐藏倒计时
  224. hiddenBtn.innerHTML = visibleMark;
  225. hiddenBtn.style.right = "20px";
  226. pauseBtn.style.visibility = "hidden";
  227. leftTimeDiv.style.visibility = "hidden";
  228. settingBtn.style.visibility = "hidden";
  229. xDropdownContentDiv.style.visibility = "hidden";
  230. }
  231. else
  232. {//显示倒计时
  233. hiddenBtn.innerHTML = unvisibleMark;
  234. hiddenBtn.style.right = "140px";
  235. pauseBtn.style.visibility = "visible";
  236. leftTimeDiv.style.visibility = "visible";
  237. settingBtn.style.visibility = "visible";
  238. xDropdownContentDiv.style.visibility = "visible";
  239. }
  240. }));
  241.  
  242. //设置按钮点击事件
  243. document.getElementById("settingBtn").addEventListener("click", (function(){
  244. //切换倒计时的时长
  245. }));
  246.  
  247. //[暂停/继续]按钮点击事件
  248. document.getElementById("pauseBtn").addEventListener("click", (function(){
  249. if(pauseBtn.innerHTML == pauseMark)
  250. {//暂停倒计时
  251. pauseBtn.innerHTML = playMark;
  252. pauseBtn.style.color = "salmon";
  253. hiddenBtn.innerHTML = unvisibleMark;
  254. hiddenBtn.style.visibility = "visible";
  255. settingBtn.style.visibility = "visible";
  256. xDropdownContentDiv.style.visibility = "visible";
  257. clearInterval(timer);
  258. }
  259. else
  260. {//继续倒计时
  261. pauseBtn.innerHTML = pauseMark;
  262. pauseBtn.style.color = "#666666";
  263. hiddenBtn.innerHTML = visibleMark;
  264. hiddenBtn.style.visibility = "hidden";
  265. settingBtn.style.visibility = "hidden";
  266. xDropdownContentDiv.style.visibility = "hidden";
  267. timer = setInterval(function(){
  268. if(seconds<=0){
  269. //倒计时结束,重载页面
  270. location.reload();
  271. }else{
  272. seconds--;
  273. document.getElementById("leftTime").innerHTML=reloadHint+Math.floor(seconds/60).toString().padStart(2,'0')+":"+(seconds%60).toString().padStart(2,'0');
  274. }
  275. },1000);
  276. }
  277. }));
  278. //选项1
  279. document.getElementById("opt1").addEventListener("click", (function(e){
  280. DBConfig.selectedOption = 1;
  281. //设置倒计时长5分钟
  282. setCountDown(e,1,5);
  283. }));
  284. //选项2
  285. document.getElementById("opt2").addEventListener("click", (function(e){
  286. DBConfig.selectedOption = 2;
  287. //设置倒计时长4分钟
  288. setCountDown(e,2,4);
  289. }));
  290. //选项3
  291. document.getElementById("opt3").addEventListener("click", (function(e){
  292. DBConfig.selectedOption = 3;
  293. //设置倒计时长3分钟
  294. setCountDown(e,3,3);
  295. }));
  296. //选项4
  297. document.getElementById("opt4").addEventListener("click", (function(e){
  298. DBConfig.selectedOption = 4;
  299. //设置倒计时长2分钟
  300. setCountDown(e,4,2);
  301. }));
  302. //选项5
  303. document.getElementById("opt5").addEventListener("click", (function(e){
  304. DBConfig.selectedOption = 5;
  305. //设置倒计时长1分钟
  306. setCountDown(e,5,1);
  307. }));
  308. //设置倒计时
  309. //@newCountDown 倒计时分钟数
  310. function setCountDown(e,opt, newCountDown){
  311. //更新选中项
  312. for(var key in optsDisplay){
  313. document.getElementById(key).innerHTML=optsDisplay[key]=optsDisplay[key].replace(optSelectedMark,"");
  314. }
  315. e.path[0].innerHTML=(optsDisplay["opt"+opt] += optSelectedMark);
  316. debug("======================= change countdown =======================")
  317. debug(e.path[0].innerHTML)
  318. //更新倒计时
  319. seconds = newCountDown * 60;
  320. document.getElementById("leftTime").innerHTML=reloadHint+Math.floor(seconds/60).toString().padStart(2,'0')+":"+(seconds%60).toString().padStart(2,'0');
  321. DBConfig.countDown = newCountDown;
  322. GM_setValue("Config", JSON.stringify(DBConfig));
  323. }
  324. }, 100);
  325. }
  326. })();
  327. }();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址