请参阅此相关问题以获取此背景信息:
How can I load a shared web worker with a user-script?
考虑到这个问题,我想探索修改Shared Worker构造函数的可能性(在用户脚本的上下文中),以便负责加载Web worker的机制被替换为GM函数{{3} },与GM_xmlhttpRequest
类似,同时忽略相同的原始策略。
为了清楚起见,我正在编写Stack Overflow的用户脚本,以帮助自己和其他人自动执行某个过程,我需要在两个开放的SO标签之间进行通信,这可以通过共享Web很好地完成工人,但是如果你看一下我引用的相关问题,那就有问题了。
是否可以修改加载共享Web工作者中的工作者的机制?它是否使用了网页的原生XMLHttpRequest
,还是我们无法触及的内部功能?如果可以修改,我该如何访问它才能执行修改?
答案 0 :(得分:-1)
你想用
SharedWorker
做什么?在不必使用同一域的页面之间传递消息 设置一个恒定的间隔来检查本地存储变量是否有 改变。
您可以使用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>