Variables 如何在页面重新加载时使用Greasemonkey脚本记住变量

Variables 如何在页面重新加载时使用Greasemonkey脚本记住变量,variables,greasemonkey,storage,Variables,Greasemonkey,Storage,我在一个移动网站上遇到了一个问题,我直接在电脑的firefox浏览器上运行。每次单击按钮时,页面都会重新加载,从而重置我的变量。我有这个剧本: // ==UserScript== // @name trada.net autoclick 55_1min_mobile // @namespace airtimeauction auto click // @include http://www.trada.net/Mobile/ // @version 0.1 // @de

我在一个移动网站上遇到了一个问题,我直接在电脑的firefox浏览器上运行。每次单击按钮时,页面都会重新加载,从而重置我的变量。我有这个剧本:

// ==UserScript==
// @name        trada.net autoclick 55_1min_mobile
// @namespace   airtimeauction auto click
// @include http://www.trada.net/Mobile/
// @version     0.1
// @description Automatically click // ==/UserScript==

var interval            = 57000;
var bidClickTimer       = setInterval (function() {BidClick (); }, interval);
var numBidClicks        = 0;

function BidClick ()
{var bidBtn1=document.getElementById("ctl00_mainContentPlaceholder_AirtimeAuctionItem7_btn_bidNow");







    numBidClicks++;
    if (numBidClicks > 500)
    {
        clearInterval (bidClickTimer);
        bidClickTimer   = "";
    }
    else
    {
        bidBtn1.click (1);

    }
};



BidClick();

它应该每57秒点击一次按钮,但一旦点击按钮,页面就会重新加载,从而重置变量。如何让greasemonkey在重新加载时“记住”或将变量转移到下一页/脚本?它是否与GM_setValue有关?这将只是这几个变量,但第二个问题是,它会从“57”秒减去重新加载页面所需的几秒吗?我该如何补偿呢?

是的,我认为您必须使用
GM\u setValue
/
GM\u getValue

如果您必须每57秒执行一次操作,那么请计算重新加载后下一个操作应该发生的时间,并使用
GM_setValue
存储它。
脚本启动时,首先读取是否存储了下一个操作,如果存储了,则使用该时间计划下一个操作,然后计算该操作的时间,依此类推……

除了GM_setValue之外。。。 您还可以使用新的Javascript“localStorage”对象或sqljavascript API

SQL方法的优点是它在脚本中的资源消耗非常少(想想看,你可以将每个结果折叠起来,并在需要时通过精确的查询将其调用,而不是将大量结果串在一起。缺点是你必须设置一个SQL server,但使用类似SQLite的东西,这在现在并不是什么大问题。即使postgres或mysql也可以在笔记本电脑上快速旋转…

将在中设置一个值。)当然,它的作用域是脚本,但是如果您的脚本跨多个域运行,它将起作用

将无限期地设置一个值,并且作用域为页面的域,因此不会跨域工作,但如果需要多个GreaseMonkey脚本来访问相同的值,则可以工作

仅当窗口或选项卡处于打开状态且范围仅限于该域的该窗口或选项卡时,才会设置值

可以无限期地或仅在浏览器打开时设置值,并且可以跨子域、单个域、路径或单个页面确定范围

这些是用于跨页面加载存储值的主要客户端机制,用于此目的。但是,有时还有另一种方法是可能的(如果页面本身不使用它),并且也非常有用;
window.name


window.name
的作用域是窗口或选项卡,但也可以跨域工作。如果需要存储多个值,则可以将它们放入一个对象中,并存储该对象的JSON字符串。例如
window.name=JSON.stringify(obj)

在此处显示的代码中,删除对
BidClick()的最后一次调用;
。这就是您的评论(关于另一个问题)中提到的“在间隔之前单击”问题的原因。第一个URL(您加载的)和后续URL(单击加载的)之间有什么区别吗?有任何细节吗?@brock.是的,有些细节会改变。此代码只是一个示例。在我要运行的代码中,还有另外两个计时器。例如,如果R1100的拍卖完成,则“立即出价”按钮不可用,除非您进行更新,因此程序必须:1.更新页面,使其在3分钟后再次可用;2.在2小时后重新启动1分钟的v\单击过程,这将使您首先转到登录页面,然后再转到此页面。