chrome 插件和页面变量共享传输

2016-03-17 14:52:39 +08:00
 456vv
<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()
2291 次点击
所在节点    JavaScript
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/264198

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX