这是一个创建于 3180 天前的主题,其中的信息可能已经有所发展或是发生改变。
<script>
window.Connect = function(time){
var bereceive = [],
besend = [], a, b;
var body = document.body;
if(!body){
throw new Error("window.Connect 函数内没有找个 document.body 元素对象");
return;
};
if(chrome["extension"]){
a = "plugs",b= "web";
}else{
a = "web",b= "plugs";
};
var loop = window.setInterval(function(){
var p = body.dataset[a];//设置
var w = body.dataset[b]; //读取
//接收来自网页端变量
try{
var j = JSON.parse(w);
bereceive.push(j);
}catch(e){}
body.dataset[b]="";
//判断网页端是否读取了插件端的发送,再判断是否有数据要发送
try{
if(!p && besend.length){
var t = besend.shift();
var s = JSON.stringify(t);
body.dataset[a]=s;
}
}catch(e){}
},time||500);
return {
"Get": function(){
if(!bereceive.length){return null};
return bereceive.shift();
},
"Set":function(arg){
besend.push(arg);
},
"Close":function(){
window.clearInterval(loop);
}
}
}(/*这里可设置刷新时间,默认 500 毫秒*/);
</script>
//使用方法:上面代码,需要在插件端和网页端放入,这样才能通信。使用这个方法之前,我想不出还有什么方法可以直接变量共享,如果大家有更好的方法,留言回复一下。谢谢。
插件或网页端设置
window.Connect.Set({a:1,b:2})
插件或网页端读取
var a = window.Connect.Get()
console.log(a)
//{a:1,b:2}
插件或网页端关闭,这个可以不用理会。
window.Connect.Close()