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

发布于 2024-11-28 23:16:16 字数 220 浏览 1 评论 0 原文

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

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

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

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

I have two scripts. I put them in the same namespace (the @namespace field).

I'd like them to interactive with another.

Specifically I want script A to set RunByDefault to 123. Have script B check if RunByDefault==123 or not and then have script A using a timeout or anything to call a function in script B.

How do I do this? I'd hate to merge the scripts.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吹泡泡o 2024-12-05 23:16:17

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

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

  • Cookies - 仅在同一域中工作
  • localStorage -- 仅在同域中工作
  • 通过 AJAX 向您控制的服务器发送和接收值 -- 可以跨域工作。

就是这样。

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

请参阅Tampermonkey 中跨选项卡通信的工作示例


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

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

在实践中,我从未遇到过这样的情况:合并真正需要共享数据的脚本不是更简单、更干净。


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

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

The scripts cannot directly interact with each other and // @namespace is just to resolve script name conflicts. (That is, you can have 2 different scripts named "Link Remover", only if they have different namespaces.)

Separate scripts can swap information using:

  • Cookies -- works same-domain only
  • localStorage -- works same-domain only
  • Sending and receiving values via AJAX to a server that you control -- works cross-domain.

That's it.

Different running instances, of the same script, can swap information using GM_setValue() and GM_getValue(). This technique has the advantage of being cross-domain, easy, and invisible to the target web page(s).

See this working example of cross-tab communication in Tampermonkey.


On Chrome, and only Chrome, you might be able to use the non-standard FileSystem API to store data on a local file. But this would probably require the user to click for every transaction -- if it worked at all.

Another option is to write an extension (add-on) to act as a helper and do the file IO. You would interact with it via postMessage, usually.

In practice, I've never encountered a situation were it wasn't easier and cleaner to just merge any scripts that really need to share data.


Also, scripts cannot share code, but they can inject JS into the target page and both access that.

Finally, AFAICT, scripts always run sequentially, not in parallel. But you can control the execution order from the Manage User Scripts panel

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文