【问题标题】:Get 2 userscripts to interact with each other?获取 2 个用户脚本以相互交互?
【发布时间】:2011-10-24 21:51:46
【问题描述】:

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

我希望他们与其他人互动。

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

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

【问题讨论】:

  • 我很惊讶这个问题没有得到更多的支持。

标签: greasemonkey userscripts tampermonkey interaction


【解决方案1】:

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

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

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

就是这样。

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

this working example of cross-tab communication in Tampermonkey


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

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

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


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

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

【讨论】:

  • 如何将脚本注入页面?
  • 例如,参见this answer 的第一部分。本质上,您创建了一个 <script> 节点。
猜你喜欢
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多