【问题标题】:Modify GM_setValue and GM_getValue for cross-tab communication : How to access Firefox Preferences variables?修改 GM_setValue 和 GM_getValue 以进行跨表通信:如何访问 Firefox Preferences 变量?
【发布时间】:2011-05-19 11:22:03
【问题描述】:

我有一个与我的 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 中访问首选项的值?语法是什么?

谢谢 ;-)

【问题讨论】:

  • 也许您可以使用在两个页面上运行的单个 GM 脚本,并使用一个大的 if 语句来决定脚本的哪一部分根据 url 运行。

标签: javascript firefox greasemonkey


【解决方案1】:

如果我对您的问题的理解是正确的,那么您几乎可以在 IE 中做同样的事情:在每个选项卡中运行一个用户脚本。

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

所以您需要做的就是在两个选项卡中运行相同的用户脚本,然后根据window.location.href 的检查让它执行不同的操作。

【讨论】:

    【解决方案2】:

    目前,唯一的方法是制作一个在两个页面上运行的脚本。
    您可以通过添加 Wimmel 之前提到的 if 语句来区分它们。

    但是,您可以考虑使用 unsafeWindow 在全局范围内添加数据并将代码分成 2 个脚本,但是这两个脚本的执行顺序会影响结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      相关资源
      最近更新 更多