V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
456vv
V2EX  ›  JavaScript

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

  •  
  •   456vv · 2016-03-17 14:52:39 +08:00 · 2437 次点击
    这是一个创建于 3167 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <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()
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5251 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:41 · PVG 13:41 · LAX 21:41 · JFK 00:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.