如何从运行脚本的页面元素为Tampermonkey用户脚本设置持久化值?
复选框状态持久化的Tampermonkey最佳实践
A方案是不是最优实现?
A方案绝对是靠谱且推荐的常规实现方式,理由如下:
- 逻辑直白:用
yes对应选中、no对应未选中,不管是自己后续维护还是别人看代码,一眼就能懂,不会因为隐含规则绕弯。 - 默认值兜底:
GM_getValue设默认值no,首次打开页面时复选框肯定是未选中状态,不会因为存储里没数据就乱了行为。 - 抗造性强:哪怕存储里的某个键不小心丢了,默认值也能让页面正常工作,不会出奇怪的bug。
给你个实际能用的代码示例:
// 页面加载时恢复复选框状态 window.addEventListener('load', () => { const checkbox = document.getElementById('target-checkbox'); if (checkbox) { const savedStatus = GM_getValue('target-checkbox', 'no'); checkbox.checked = savedStatus === 'yes'; } }); // 监听复选框变化,实时存状态 const checkbox = document.getElementById('target-checkbox'); if (checkbox) { checkbox.addEventListener('change', () => { GM_setValue('target-checkbox', checkbox.checked ? 'yes' : 'no'); }); }
B方案可行吗?
B方案靠键存不存在来判断状态,不建议作为常规用法,问题不少:
- 逻辑绕:未选中对应键不存在,选中对应键存在,这种隐含规则很容易忘,过俩月自己看代码都得反应半天,更别说别人协作了。
- 容易丢状态:要是用户不小心清了Tampermonkey的存储,或者某个键意外被删,就会被当成未选中,之前的选中状态直接丢了。
- 不好扩展:以后要是加更多复选框或者其他控件,这种方式会让存储结构乱成一锅粥,不如明确的键值对好管理。
附加问题:发布后能改问题类型吗?
在Stack Exchange平台(包括Stack Overflow),发完问题后自己没法直接改问题类型,但有办法解决:
- 如果你声望够高,可以直接编辑问题,把原来的“建议”类标签换成
best-practices这类对应“最佳实践”的标签。 - 声望不够的话,要么在问题评论区喊一声,找有权限的用户帮忙改标签;要么联系社区管理员说明情况,请他们帮忙调整。
内容的提问来源于stack exchange,提问作者Gerold Broser
相关产品推荐
相关产品推荐

