上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

[油猴脚本] GM_lock: 应付多页面处理的任务锁

[复制链接]

该用户从未签到

4

主题

0

回帖

14

积分

助理工程师

积分
14
发表于 昨天 00:34 | 显示全部楼层 | 阅读模式

本帖最后由 cyfung1031 于 2025-11-25 00:36 编辑

原文: https://github.com/scriptscat/scriptcat/issues/891
脚本猫:https://scriptcat.org/zh-CN/script-show-page/4709
测试:
https://detail.zol.com.cn/notebook/index1173171.shtml
https://detail.zol.com.cn/notebook/index1211055.shtml
https://detail.zol.com.cn/notebook/index1207474.shtml
https://detail.zol.com.cn/notebook/index1322065.shtml
https://detail.zol.com.cn/notebook/index1143937.shtml
https://detail.zol.com.cn/notebook/index1212920.shtml
https://detail.zol.com.cn/notebook/index1165564.shtml
https://detail.zol.com.cn/notebook/index1210802.shtml

// ==UserScript==
// @name         Example Script for GM_lock
// @namespace    yourname.scripts
// @version      0.1
// @description  把当前网页URL保存到存储列表中
// @author       You
// @match        *://*/*
// @grant        GM.getValue
// @grant        GM.setValue
// @grant        GM.setValues
// @grant        GM.deleteValue
// @grant        GM.deleteValues
// @grant        GM.listValues
// @grant        GM_addValueChangeListener
// @grant        GM_removeValueChangeListener
// @require      https://scriptcat.org/lib/4709/0.1.0/GM_lock.js?sha384-dbz4ENOCrR50Xa7gxF6jsZLb8ExaYEMuOpTpDgw6Xt4yavf5ZgoPnbaoN4M3MIMQ
// @noframes
// ==/UserScript==

/* global GM_lock */
(function () {
  'use strict';
  GM_lock("lock_urls", async () => {
    console.log("开始", Date.now(), performance.now());
    // 等一下这个页面SC的缓存更新
    await new Promise(resolve => setTimeout(resolve, 50));
    // 从存储中读取已有的列表
    let list = await GM.getValue('list', []); // 设置默认值为空数组
    // 如果当前URL不在列表中,就添加进去
    console.log("初始列表:", list.slice());
    if (!list.includes(location.href)) {
      list.push(location.href);
      await GM.setValue('list', list);
      console.log('✅ 已保存此页面到列表:', location.href);
    } else {
      console.log('ℹ️ 当前页面已在列表中');
    }
    // 可选:在控制台查看当前列表
    console.log('当前列表:', list.slice());
    // 等一下其他页面SC的缓存更新
    await new Promise(resolve => setTimeout(resolve, 50));
    console.log("结束", Date.now(), performance.now());
  });
})();

发表回复

本版积分规则

快速回复 返回顶部 返回列表