获取2个用户脚本互相交流?

时间:2011-08-11 11:44:22

标签: greasemonkey userscripts tampermonkey interaction

我有两个脚本。我将它们放在相同的命名空间(@namespace字段)。

我希望他们与他人互动。

具体来说,我希望脚本A RunByDefault设置为123. 脚本B 检查是否RunByDefault==123,然后脚本A 使用超时或任何东西调用脚本B 中的函数。

我该怎么做?我讨厌合并脚本。

1 个答案:

答案 0 :(得分:7)

脚本不能直接相互交互,// @namespace只是解决脚本名称冲突。 (也就是说,只有当它们具有不同的名称空间时,您才能拥有两个名为“Link Remover”的不同脚本。)

单独的脚本可以使用以下方式交换信息:

  • Cookie - 仅适用于同域
  • localStorage - 仅适用于同域
  • 通过AJAX向您控制的服务器发送和接收值 - 跨域工作。

就是这样。

不同的运行实例<相同脚本的 可以使用GM_setValue()GM_getValue()交换信息。该技术具有跨域,易于和目标网页不可见的优点。

请参阅this working example of cross-tab communication in Tampermonkey


在Chrome上,只有Chrome,您可能能够使用非标准FileSystem API将数据存储在本地文件中。但这可能需要用户点击每笔交易 - 如果它完全有效。

另一个选择是编写扩展(附加组件)以充当帮助程序并执行文件IO。您通常会通过postMessage与其进行互动。

在实践中,我从未遇到过合并任何真正需要共享数据的脚本并不简单和清晰的情况。


此外,脚本不能共享代码,但是它们可以将JS注入目标页面并且都可以访问它。

最后,AFAICT,脚本总是按顺序运行,而不是并行运行。但您可以从管理用户脚本面板

控制执行顺序