是否可以修改Shared Web Workers中加载worker的机制?
Can the mechanism that loads the worker in Shared Web Workers be modified?
请参阅此相关问题以了解相关背景:
考虑到这个问题,我想探索修改 Shared Worker 构造函数的可能性(在用户脚本的上下文中),以便用 GM 函数替换负责加载 web worker 的机制 GM_xmlhttpRequest
, which works like XMLHttpRequest
同时忽略同源策略。
明确地说,我正在为 Stack Overflow 编写一个用户脚本,以帮助为我自己和其他人自动执行某个过程,我需要在两个打开的 SO 选项卡之间进行通信,这可以通过共享 Web 很好地完成工人,但是如果你看看我引用的相关问题,那就有问题了。
是否可以修改Shared Web Workers中加载worker的机制?它是使用页面的原生 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>
请参阅此相关问题以了解相关背景:
考虑到这个问题,我想探索修改 Shared Worker 构造函数的可能性(在用户脚本的上下文中),以便用 GM 函数替换负责加载 web worker 的机制 GM_xmlhttpRequest
, which works like XMLHttpRequest
同时忽略同源策略。
明确地说,我正在为 Stack Overflow 编写一个用户脚本,以帮助为我自己和其他人自动执行某个过程,我需要在两个打开的 SO 选项卡之间进行通信,这可以通过共享 Web 很好地完成工人,但是如果你看看我引用的相关问题,那就有问题了。
是否可以修改Shared Web Workers中加载worker的机制?它是使用页面的原生 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>