【问题标题】:How to save page settings for the next session?如何为下一个会话保存页面设置?
【发布时间】:2013-10-02 10:53:58
【问题描述】:

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

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

例如:

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


在此示例中,我希望 check0 始终为真。但是,当我重新加载页面时,它是错误的,直到我再次单击复选框。

【问题讨论】:

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


    【解决方案1】:

    使用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.$ 更改为 $

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-28
        • 2012-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多