利用workerman和 谷歌插件通訊相結合javascript
1 首先獲取groupid 保證插件和inject 同個房間 這樣還能夠用workerman 相互發送java
先插件得到groupid 傳遞到injectsql
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只是中間的過渡chrome
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 json
最後發現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); // 向全部人發送 }
這個後臺代碼只是個橋樑app