【问题标题】: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 在所有浏览器和大多数移动设备中都得到很好的支持