javascript - Shared Web Workers 中加载worker 的机制可以修改吗?

标签 javascript userscripts

请参阅此相关问题了解背景:

How can I load a shared web worker with a user-script?

考虑到这个问题,我想探索修改 Shared Worker 构造函数的可能性(在用户脚本的上下文中),以便将负责加载 Web Worker 的机制替换为 GM 函数 GM_xmlhttpRequest ,其工作方式类似于 XMLHttpRequest同时忽略同源政策。

需要明确的是,我正在为 Stack Overflow 编写一个用户脚本,以帮助我自己和其他人自动化某个流程,并且我需要在两个打开的 SO 选项卡之间进行通信,这可以通过共享 Web Worker 很好地完成,但是,如果您查看我引用的相关问题,就会发现其中存在问题。

Shared Web Workers中加载worker的机制可以修改吗?它使用页面的 native XMLHttpRequest 还是一些我们无法触及的内部功能?如果可以修改,我如何访问它以执行修改?

最佳答案

What are you trying to achieve using SharedWorker?

to pass messages between pages from the same domain without having to set a constant interval to check if a local storage variable had changed.

您可以使用storage事件在同源选项卡之间传递消息

index.html

<!DOCTYPE html>
<html>

  <head>
  </head>

  <body>
    <a href="b.html" target="_blank">open b.html</a>
    <textarea></textarea>
    <button>click</button>
    <script>
      var messages = [];
      var button = document.querySelector("button");
      var textarea = document.querySelector("textarea");
      window.addEventListener("storage", function(e) {
        console.log(e.newValue, JSON.parse(localStorage.getItem("messages")));

      });
      button.addEventListener("click", function() {
        messages.push(textarea.value);
        localStorage.setItem("messages", JSON.stringify(messages));
        localStorage.setItem("message", textarea.value);
        textarea.value = "";
      })
    </script>
    </body>
</html>

b.html

<!DOCTYPE html>
<html>

  <head>
  </head>

  <body>
    <textarea></textarea>
    <button>click</button>

    <script>
    var messages = JSON.parse(localStorage.getItem("messages"));
      window.addEventListener("storage", function(e) {
        console.log(e.newValue, JSON.parse(localStorage.getItem("messages")));
      });
      var button = document.querySelector("button");
      var textarea = document.querySelector("textarea");
      button.addEventListener("click", function() {
        messages.push(textarea.value);
        localStorage.setItem("message", textarea.value);
        localStorage.setItem("messages", JSON.stringify(messages));
        textarea.value = "";
      })
    </script>
    </body>
</html>

plnkr http://plnkr.co/edit/4nR7Rpu4zXSgTR831vQW?p=preview

关于javascript - Shared Web Workers 中加载worker 的机制可以修改吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38938039/

相关文章:

javascript - 创建支持触摸和单击的绑定(bind)

javascript - 使用JavaScript动态更改YouTube播放器的大小?

javascript - 删除匿名事件监听器

javascript - Greasemonkey- 从搜索引擎结果页面中随机挑选单词

javascript - 包含其他 gulp 文件的 Gulpfile

javascript - 根据数量用矩形填充页面

javascript - 创建/append 节点与 innerHTML

javascript - 如何防止网页检测到我正在运行脚本?

javascript - Chrome 用户脚本是否与 Greasemonkey 脚本一样与全局命名空间分开?

javascript - 如何将实例化的对象添加到 DOM 中?在 Vanilla JS 中模拟 React