9

我有两个脚本。我把它们放在同一个命名空间(@namespace字段)中。

我希望他们与另一个人互动。

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

我该怎么做呢?我不想合并脚本。

4

1 回答 1

9

脚本之间不能直接交互,// @namespace只是为了解决脚本名称冲突。(也就是说,您可以拥有 2 个不同的名为“Link Remover”的脚本,前提是它们具有不同的命名空间。)

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

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

而已。

同一脚本的不同运行实例可以使用GM_setValue()和交换信息GM_getValue()。这种技术具有跨域、简单且对目标网页不可见的优点。

请参阅Tampermonkey 中的这个跨表通信的工作示例


在 Chrome 上,并且仅在 Chrome 上,您可能能够使用非标准FileSystem API将数据存储在本地文件中。但这可能需要用户点击每笔交易——如果它确实有效的话。

另一种选择是编写一个扩展(附加组件)来充当助手并执行文件 IO。您postMessage通常会通过 与它进行交互。

在实践中,我从未遇到过仅合并任何真正需要共享数据的脚本并不容易和干净的情况。


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

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

于 2011-08-11T13:08:50.790 回答