如何保存下一个会话的页面设置?

时间:2013-10-01 14:20:18

标签: javascript jquery greasemonkey session-state html-input

使用我的Greasemonkey脚本,我添加了一个复选框。我的想法是,如果复选框为true,则执行某些操作,但如果是false则不执行任何操作。

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

例如:

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


在这个例子中,我希望check0始终为真。但是,当我重新加载页面时,我再次单击该复选框是错误的。

2 个答案:

答案 0 :(得分: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.$更改为$

答案 1 :(得分:0)

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