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

时间:2011-06-13 18:03:25

标签: 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
// @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”秒重新加载页面所需的几秒钟吗?我如何弥补这一点?

3 个答案:

答案 0 :(得分:1)

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

SQL方法的优势在于它在脚本中的资源消耗非常微弱(想想它;而不是连接大量的结果,你可以收集每个结果并在需要时通过精确查询来调用它缺点是你必须设置一个SQL服务器,但是使用像SQLite这样的东西这些日子并不是什么大问题。即使是postgres或mysql也可以在笔记本电脑上快速旋转......

答案 1 :(得分:0)

是的,我认为您必须使用GM_setValue / GM_getValue

如果您必须每57秒执行一次操作,请计算重新加载后应执行下一个操作的时间,并使用GM_setValue进行存储。 当您的脚本启动时,如果存储了下一个操作,请先读取,如果存储,则使用该时间来安排下一个操作,然后计算操作的时间,依此类推......

答案 2 :(得分:0)

GM.setValue将无限期设置一个值,并以脚本为范围,但是如果您的脚本跨多个域运行,则可以使用。

window.localStorage将无限期设置一个值,并且范围是页面的域,因此将无法跨域使用,但是如果您需要多个GreaseMonkey脚本访问相同的值,则可以使用。

window.sessionStorage仅在窗口或选项卡打开时设置一个值,并且范围仅限于该域的那个窗口或选项卡。

document.cookie可以无限期设置值,也可以仅在浏览器打开时设置值,并且可以跨子域,单个域,路径或单个页面设置范围。

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

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