gpt4 book ai didi

javascript - 在使用基本的 greasemonkey 脚本时遇到问题 - GM.getValue/GM.setValue(我认为)

转载 作者:行者123 更新时间:2023-11-29 15:07:47 24 4
gpt4 key购买 nike

我正在尝试编写一个基本的 Greasemonkey 脚本,但我遇到了一些问题。本质上,该脚本将刷新页面并计算页面上的图像数量。如果图像数量增加,它会提醒我并激活该选项卡。如果图像数量相同或更少,它将以设定的时间间隔继续刷新页面。

根据我的研究,我认为最好的做法是使用 GM.getValue/GM.setValue 来存储图像数量以将其与新图像计数进行比较。虽然我似乎无法让它运行 - 我认为我的逻辑是合理的,但这只是一个语法问题,尽管尝试了不同的变体。我以前从未使用过 Javascript!

// ==UserScript==
// @name *Page Refresher
// @include *
// ==/UserScript==
// @grant GM.getValue
// @grant GM.setValue

var refreshRate = 10000; //Refreshes every 10s
var newCount =document.images.length; //Counts images on page

if (GM.getValue('oldCount',-1) === -1){
GM.setValue('oldCount',newCount);
window.setTimeout(function(){window.location.reload() ;},refreshRate);
} else {
if (newCount <= GM.getValue('oldCount')){
GM.setValue('oldCount',newCount);
window.setTimeout(function(){window.location.reload() ;},refreshRate);
} else {
if (newCount > GM.getValue('oldCount')){
GM.setValue('oldCount',newCount);
alert('More images!');
}
}

这是我正在使用的粗略代码。我只是不太确定我哪里出错了——我确定这很简单,但我肯定在挣扎。谢谢!

最佳答案

GM4 中的那些函数(如 GM.getValue )是异步的。这意味着它们返回的值不像在同步 API 中那样立即可用。

在异步代码中,需要等待响应。

注意:您应该获取一次 oldCount 的值并将其缓存,而不是从存储的值中获取一遍又一遍。元数据 block 中也存在错误。

这是一个基于您的代码的示例(代码已简化)

// ==UserScript==
// @name Page Refresher
// @include *
// @grant GM.getValue
// @grant GM.setValue
// ==/UserScript==

(async () => {

const refreshRate = 10000; // Refreshes every 10s
const newCount = document.images.length; // Counts images on page
const oldCount = await GM.getValue('oldCount', -1);

await GM.setValue('oldCount', newCount); // save new value, wait since refreshing before saving can cause issues

if (newCount > oldCount){
alert('More images!');
}
else {
setTimeout(() => { location.reload(); }, refreshRate);
}

})();

关于javascript - 在使用基本的 greasemonkey 脚本时遇到问题 - GM.getValue/GM.setValue(我认为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58124757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com