1

在我的 Greasemonkey 脚本中,我添加了一个复选框。我的想法是,如果复选框为真,则做某事,但如果为假,则什么也不做。

我还希望复选框记住用户的最后选择,以便如果用户关闭网页或浏览器,当他返回复选框时再次为真/假。

例如:

$('input[name=check0]').click(function(){
    $('#shoutbox_b').click();
});


在这个例子中,我希望check0永远真实。但是,当我重新加载页面时,它是错误的,直到我再次单击复选框。

4

2 回答 2

2

使用GM_setValue()localStorage保存页面加载之间的输入状态。

这是一个完整的 Greasemonkey 脚本,使用 jQuery,显示了该过程。它适用于普通的静态页面。(对于 AJAX 驱动的页面,您也可以使用waitForKeyElements):

// ==UserScript==
// @name     _Save checkbox state between page visits
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @grant    unsafeWindow
// ==/UserScript==

//-- Get saved state:
var chk0wasChked    = (localStorage.getItem ('check0_state')  ==  "true");

//-- Get current state:
var chk0isChked     = $('input[name=check0]').prop ('checked');

/*-- If the states don't match, click the checkbox to synch them up.
    We need a small delay to avoid race conditions.
*/
setTimeout (setThenMonitorCheckboxState, 333);

function setThenMonitorCheckboxState () {
    if (chk0wasChked != chk0isChked) {
        unsafeWindow.$('input[name=check0]').click ();
    }

    //-- *After* the initial set, monitor & save any future state changes:
    $('input[name=check0]').click ( function () {
        var chk0isChked = $('input[name=check0]').prop ('checked');

        localStorage.setItem ('check0_state', chk0isChked);
    } );
}

注意:问题不清楚。如果原始点击处理程序input[name=check0]是由目标页面设置的。使用上面的代码。

但是,如果原始点击处理程序input[name=check0]是由 Greasemonkey 脚本设置的,则更改为unsafeWindow.$just $

于 2013-10-02T02:40:21.163 回答
0

使用 localStorage 是您的最佳选择,甚至超过 cookie。localStorage 在所有浏览器和大多数移动设备中都得到很好的支持

于 2013-10-02T02:53:58.520 回答