Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
375 views
in Technique[技术] by (71.8m points)

javascript - Can the mechanism that loads the worker in Shared Web Workers be modified?

Please see this related question for a background to this:

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

With that question in mind, I want to explore the possibility (in context of a user-script) of modifying the Shared Worker constructor so that the mechanism responsible for loading the web worker is replaced with the GM function GM_xmlhttpRequest, which works like XMLHttpRequest while ignoring same origin policies.

To be clear, I'm writing a user script for Stack Overflow to help automate a certain process for myself and others, and I need to communicate between two open SO tabs, which can be done nicely with a Shared Web Worker, however if you'll look at the related question I cited, there are problems with that.

Can the mechanism that loads the worker in Shared Web Workers be modified? Does it use the page's native XMLHttpRequest or is it some internal function which we can't touch? If it can be modified, how can I access it in order to perform the modification?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.

You can use storage event to communicate messages between tabs at same origin

At 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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...