修改GM_setValue和GM_getValue以进行交叉表通信:如何访问Firefox首选项变量?

时间:2011-05-18 14:18:07

标签: javascript firefox greasemonkey

我遇到了与我的GM用户脚本相关的新问题。

此脚本的目的是从外部域检索数据。我对Firefox的第一次尝试让我设计了一个页面,我的表单被填充,iframe嵌入了外部页面。通过使用setInterval并识别它是顶部窗口,或者如果我们在iframe中,我成功使用GM_setValue和GM_getValue来获取数据。

但是使用IE(IE7PRO),我发现我能够将我的脚本分成2个脚本:一个只处理表单,另一个处理外部域。 IE7PRO提供了可在产品的任何选项卡/页面上检索的等效函数(PRO_getValue和PRO_setValue)。唯一的区别是它适用于交叉表/页面,所以我不必在我自己的页面上包含iframe,我可以为外部域打开自己的选项卡,这个选项卡大约要好一百万倍(至少是。 ..)!

我在Firefox上尝试过相同的操作,但显然无效。我已经浏览了documentation of those functions,看来在Firefox中,数据存储在Preferences(about:config to access)中。

那么,有没有办法可以修改GM_getValue,添加参数,因为值存储在这个模型中:greasemonkey.scriptvals.namespace/script_name.value_name

有没有办法在Firefox中,在Greasemonkey用户脚本/ Javascript中访问首选项的值,语法是什么?

谢谢; - )

2 个答案:

答案 0 :(得分:5)

如果我正确理解你的问题,那么你几乎可以做你在IE中已经做过的事情:在每个标签中运行一个用户脚本。

GM_[gs]etValue 执行工作交叉表和跨页面。值按每个用户脚本存储。

所以你需要做的就是在两个标签中运行相同的用户脚本,并根据对window.location.href的检查,让它做不同的事情。

答案 1 :(得分:1)

目前,唯一的方法是制作一个在两个页面上运行的脚本 您可以通过添加Wimmel之前提到的if语句来区分它们
但是,您可以考虑使用unsafeWindow在全局范围内添加数据并将代码分成2个脚本,但是执行这两个脚本的顺序会影响结果。