Greasemonkey 中的本地存储

Posted

技术标签:

【中文标题】Greasemonkey 中的本地存储【英文标题】:LocalStorage in Greasemonkey 【发布时间】:2011-05-03 01:23:35 【问题描述】:

我已经开始编写一个greasemonkey 脚本,并且在Greasemonkey 脚本中执行本地存储时遇到了问题。我可以在 GM 中找出 localstorage 的唯一方法是在 newElement.innerhtml DOM 属性中创建另一个 javascript 实例,但是我的其余变量无法访问。

有什么想法吗?这是我正在处理的 Greasemonkey 代码片段。

        var testHref = anchorTag[i].href;
    var testHTML = anchorTag[i].innerHTML;
    var patHref = /item\?id=[0-9]*/g;
    var patCaptureId = /item\?id=([0-9]*)/g;
    var testId = patCaptureId.exec(testHref);
    var patHTML = /[0-9]* comment(|s)/g;
    var patHTML2 = /discuss/g;
    if(patHref.test(testHref) && !patHTML.test(testHTML) && !patHTML2.test(testHTML))
    
        newElement = document.createElement('span');
        newElement.style.color = "#FF0000";
        newElement.innerHTML = "<a href=\"javascript:localStorage.setItem( 'one', 'rishabhVerma' ); var test = localStorage.getItem( 'one' ); console.log( test );\"> B</a>";
        anchorTag[i].parentNode.insertBefore(newElement, anchorTag[i].nextSibling); 
    
    i++;

【问题讨论】:

【参考方案1】:

如果您只需要存储值,您可以使用经典的 Greasemonkey 方法,使用运行良好的 GM_getValue()GM_setValue() 函数。

http://wiki.greasespot.net/GM_getValue http://wiki.greasespot.net/GM_setValue

【讨论】:

@Basilevs 另一方面,非常大量的数据导致 localStorage 向您吐出异常 ;-) @JanDvorak 我对数据量的评论不再相关 - Greasemonkey uses SQLite to store values。【参考方案2】:

嗯,我猜 unsafeWindow.localStorage 不起作用?我知道chrome获取localStorage不是问题,老实说从未在firefox上尝试过。

【讨论】:

我刚刚在 Greasemonkey 脚本中使用了unsafeWindow.localStorage(在 Mac 上的 Firefox 3.6 中),这似乎工作正常。 请注意,如果 unsafeWindow 能够捕获调用 unsafeWindow 对象时发生的事件,则使用 unsafeWindow 将允许网页检测并可能最小化greasemonkey。此信息可验证here

以上是关于Greasemonkey 中的本地存储的主要内容,如果未能解决你的问题,请参考以下文章

Greasemonkey:突出显示 HTML 文件中的许多单词

Greasemonkey脚本中的setinterval()和.click()[重复]

如何用 Greasemonkey 的用户脚本替换 JSON 字符串中的文本

Linsheng - How To Determine The Grease In The Air Compressor?

Greasemonkey Add On无法正常工作

UserScripts & Greasemonkey:调用网站的 JavaScript 函数