首页 > 其他 > 详细

谷歌浏览器插件开发教程8

时间:2019-11-29 18:10:44      阅读:81      评论:0      收藏:0      [点我收藏+]

利用workerman和 谷歌插件通信相结合

 

1 首先获取groupid 保证插件和inject 同个房间 这样还可以用workerman 相互发送

先插件获得groupid 传递到inject

var groupid;
$(.chongxinlianjie).on(click, function() {
    var wsUri = "ws://111.229.30.162:8282";
    ws = new WebSocket(wsUri);
    //请求服务端后 成功后触发
    ws.onopen = function() {
        groupid = Date.parse(new Date());
        var str2 = {
            "from": "mypanel",
            "tag": begin,
            "groupid": groupid,
        };
        var str2 = JSON.stringify(str2);
        ws.send(str2);
        chrome.tabs.query({
            active: true,
            currentWindow: true
        }, function(tab) { //获取当前tab
            //向tab发送请求
            chrome.tabs.sendMessage(tab[0].id, {
                action: "begin",
                groupid: groupid,
            }, function(response) {
                //test.js的数据
            });
        });
    };
    ws.onmessage = function(evt) {
        var data = JSON.parse(evt.data);
        if (data.code == 100) {
            var list = data.data;
            var tag = list.tag;
            var from = list.from;
           
        } else {
            alert(data.msg);
        }
    };
    //我关闭服务的时候 就会触发
    ws.onclose = function(evt) {
        console.log(WebSocketClosed!);
    };
    ws.onerror = function(evt) {
        console.log(WebSocketError!);
    };
})

contentscript只是中间的过渡

function injectCustomJs(jsPath) {
    jsPath = jsPath || inject.js;
    var temp = document.createElement(script);
    temp.setAttribute(type, text/javascript);
    // 获得的地址类似:chrome-extension://ihcokhadfjfchaeagdoclpnjdiokfakg/js/inject.js
    temp.src = chrome.extension.getURL(jsPath);
    temp.onload = function() {
        // 放在页面不好看,执行完后移除掉
        this.parentNode.removeChild(this);
    };
    document.head.appendChild(temp);
}
 injectCustomJs();
// 
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {

    window.postMessage({
        cmd: sendinject,
        data: request
    }, *);
});


var
groupid; window.addEventListener("message", function(e) { var info = e.data; var cmd = info.cmd; if (cmd == "sendinject") { var data = info.data; var action = data.action; if (action == "begin") { console.log(inject开始初始化); groupid = data.groupid; var wsUri = "ws://111.229.30.162:8282"; ws = new WebSocket(wsUri); //请求服务端后 成功后触发 ws.onopen = function() { var str2 = { "from": "inject", "tag": begin, "groupid": groupid, }; var str2 = JSON.stringify(str2); ws.send(str2); }; ws.onmessage = function(evt) { var data = JSON.parse(evt.data); if (data.code == 100) { var list = data.data; var from = list.from; var tag = list.tag; var title = list.title; if (from == "mypanel") { console.log(injectjs收到的数据); console.log(list); } } else { alert(data.msg); } }; //我关闭服务的时候 就会触发 ws.onclose = function(evt) { console.log(WebSocketClosed!); }; ws.onerror = function(evt) { console.log(WebSocketError!); }; } } }, false);

上面是injectjs 

最后发现workerman代码 

 public static function onMessage($client_id, $message)
    {
        $data    = json_decode($message, true);
        $tag     = $data[tag];
        $from    = $data[from];
        $groupid = $data[groupid];
        $fid     = $client_id;

        if ($tag == begin) {
            $time       = time();
            $insertdata = array(laizi => $from, fid => $fid, groupid => $groupid, time => $time);
            commoninsertinfo($insertdata, cocoschajian);
        } else {
            $sql = select fid from cocoschajian where groupid=? and laizi=? limit 1;
            if ($from == mypanel) {
                $to = inject;
            } else {
                $to = mypanel;
            }
            $fid = commongetinfo($sql, array($groupid, $to))[0][fid];
            if (empty($fid)) {
                $data = json_encode(array(code => 323, msg => 服务器错误 请重新链接));
            } else {
                $data = json_encode(array(code => 100, msg => 发送成功, data => $data));
            }

            Gateway::sendToClient($fid, $data);
        }

        // print_r($data);
        // 向所有人发送

    }

这个后台代码只是个桥梁

谷歌浏览器插件开发教程8

原文:https://www.cnblogs.com/newmiracle/p/11959109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!