【问题标题】:Get 2 userscripts to interact with each other?获取 2 个用户脚本以相互交互?
【发布时间】:2011-10-24 21:51:46
【问题描述】:
我有两个脚本。我将它们放在同一个命名空间中(@namespace 字段)。
我希望他们与其他人互动。
具体来说,我希望 script A 将 RunByDefault 设置为 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,脚本总是按顺序运行,而不是并行运行。但是您可以从管理用户脚本面板控制执行顺序