var self = this; var chromeSchemeReg = /chrome:\/\/.*/ig; // Chrome配置项地址的正则表达式 layer = layui.layer; // 侦听来自popup的消息 chrome.runtime.onMessage.addListener(function(request, sender,sendResponse) { if (!sender || sender.id !== chrome.i18n.getMessage("@@extension_id")) return; switch (request.name) { case 'createoptionstab': chrome.tabs.create({ url: chrome.i18n.getMessage('helperUrl') }); break; case 'checktoken': // 检验token - 回传文集列表数据给popup self.checkToken(function(projects){ chrome.tabs.sendMessage(sender.tab.id,{ name:'checktokenvalue', data:projects }); }); case 'savedocfrompopup': // 保存文档 self.saveDoc(request.data); break; case 'pasteimage': // 粘贴上传图片 - 回传图片URL给popup self.pasteImg(request.data,function(url){ chrome.tabs.sendMessage(sender.tab.id,{ name:'pasteimgurl', data:url }); }); break; case 'selectprojects': selectProjects(request.data,function(projects){ chrome.tabs.sendMessage(sender.tab.id,{ name:'selectprojectsvalue', data:projects }); }) break; case 'image2base64': getImgBase64(request.data,function(url){ chrome.tabs.sendMessage(sender.tab.id,{ name:'img2base64url', data:{url:url,source:request.data} }); }) break; default: break; } }); //侦听长连接 chrome.runtime.onConnect.addListener(function(port) { switch (port.name) { case 'mrdocclipperisready': self.mrdocclipperisreadyHandlerConnect(port); case 'mrdocclipperisnotready': self.mrdocclipperisnotreadyHandlerConnect(port); break; case 'actionfrompopupinspecotr': self.actionfrompopupinspecotrHandler(port); break; default: break; } }); // 侦听浏览器上扩展图标被点击 chrome.browserAction.onClicked.addListener(function(tab) { console.log("扩展图标被点击") console.log(tab) if (!chrome.runtime.sendMessage) { var msg = "抱歉,MrDoc剪藏器暂时不支持该版本的Chrome浏览器,请将浏览器升级到最新稳定版本。点击右上角工具按钮选择'关于 Google Chrome(G)'进行自动升级" notifyTipsFail(msg) return; } var match = tab.url.match(/^(.*?):/), scheme = match[1].toLowerCase(); if (chromeSchemeReg.test(tab.url) || (scheme != "http" && scheme != "https")) { notifyTipsFail("不能在Chrome设置操作!") return; } self.createPopup();//创建popup窗口 }); //JQ设置步骤 jQuerySetUp = function() { $.ajaxSetup({ dataType: 'json', cache: false, // dataFilter: function(data) { // console.log(data) // data = $.parseJSON(data.substr(9)); //remove 'while(1);' // return data.success ? data.data : { // error: data.error // }; // }, beforeSend: function(xhr) { xhr.setRequestHeader('UserClient', 'inote_web_chromeext/3.1.0'); } }); }; jQuerySetUp(); //从文本中获取标题 getTitleByText = function(txt) { //todo var self = this, finalTitle = ''; if (txt.length <= 100) return txt; if (txt.length > 0) { var t = txt.substr(0, 100), l = t.length, i = l - 1, hasSpecialChar = false; while (i >= 0) { if (/^(9|10|44|65292|46|12290|59|65307)$/.test(t.charCodeAt(i))) { hasSpecialChar = true; break; } else { i--; } } hasSpecialChar ? (t = t.substr(0, i)) : ''; i = 0; l = t.length; while (i < l) { if (/^(9|10)$/.test(t.charCodeAt(i))) { break; } else { finalTitle += t.charAt(i); i++; } } } finalTitle = finalTitle.trim(); return finalTitle.length > 0 ? finalTitle : '[未命名笔记]'; }; //创建popup createPopup = function() { chrome.tabs.executeScript(null, { code: "try{mrdocClipper.createPopup();}catch(e){console.log(e);var port = chrome.runtime.connect({name: 'mrdocclipperisnotready'});port.postMessage();}" }); }; //关闭popup closePopup = function() { chrome.tabs.executeScript(null, { code: "mrdocClipper.closePopup();" }); }; // 检查用户Token状态 checkToken = function(callback){ var self = this; var opt = chrome.storage.local; // 获取mrdoc地址 opt.get(['serverUrl'],function(r){ self.mrdocUrl = r['serverUrl']; // 获取账户token opt.get(['accountKey'],function(r){ self.mrdocToken = r['accountKey']; // 如果存在mrdoc服务地址和账户token,获取文集 if(self.mrdocUrl != undefined && self.mrdocToken != undefined){ $.get(self.mrdocUrl + '/api/get_projects/?token='+self.mrdocToken,function(r){ console.log(r) if(r.status){ // 如果获取文集成功,表示token验证成功,已登录 // console.log(r.data) var userProjects = r.data; var item = { "projects":userProjects, "isLogin":true, "token":self.mrdocToken, "url":self.mrdocUrl } callback(item) }else{// 获取文集失败,表示token验证失败,未登录 console.log('token验证失败') callback({'isLogin':false}) //return {"isLogin":false} } }) } }) }) }; // 保存文档 saveDoc = function(data){ var self = this; // console.log(data); $.post(self.url+'/api/create_doc/?token='+self.token,data,function(r){ // var layer = layui.layer; layer.closeAll('loading') if(r.status){ //消息提示 notifyTipsSucce('文档已保存成功,你可以前往mrdoc站点查看和修改!') //关闭popup self.closePopup() }else{ //消息提示 notifyTipsFail("文档保存失败!") } }); }; // 粘贴上传图片 pasteImg = function(data,callback){ //console.log(data) $.post(self.url+'/api/upload_img/?token='+self.token,{data:data}, function (ret) { if (ret.success === 1) { //新一行的图片显示 console.log("上传图片成功") //console.log(ret.url) callback(ret.url) notifyTipsSucce("图片上传成功") }else{ console.log("上传图片失败") notifyTipsFail("图片上传失败!") } }); }; // 获取文集 selectProjects = function(data,callback){ var self = this; // console.log(data) self.url = data.url,self.token = data.token; $.ajax({ headers: { 'X-Requested-With': 'XMLHttpRequest' }, type: 'GET', url: url+'/api/get_projects/?token='+token, success: function(r) { // console.log(r) if(r.status){ callback(r.data) }else{ callback({error:true}) notifyTipsFail("文集获取请求失败,请确认你的账户token是否正确!") } }, error: function(r) { callback({error:true}) // console.log(r) notifyTipsFail("文集获取请求失败,请确认你的MrDoc站点可访问!") } }); }; // 获取外链图片base64编码 getImgBase64 = function(data,callback){ window.URL = window.URL || window.webkitURL; var xhr = new XMLHttpRequest(); xhr.open("get", data, true); // 至关重要 xhr.responseType = "blob"; xhr.onload = function(){ if(this.status == 200){ //得到一个blob对象 var blob = this.response; console.log("blob", blob) // 至关重要 let oFileReader = new FileReader(); oFileReader.onloadend = function (e) { // 此处拿到的已经是 base64的图片了 let base64 = e.target.result; //console.log("图片base64", base64) self.pasteImg(base64,callback) }; oFileReader.readAsDataURL(blob); } } xhr.send(); } // ////////////消息提示框//////////////// //成功的消息提示框 notifyTipsSucce = function(data){ chrome.notifications.create(null, { type: 'basic', iconUrl: 'img/128x128.png', title: 'MrDoc剪藏:操作成功!', message: data },function(id){ setTimeout(() => { chrome.notifications.clear(id) }, 3000); }); }; //失败的消息提示框 notifyTipsFail = function(data){ chrome.notifications.create(null, { type: 'basic', iconUrl: 'img/128x128.png', title: 'MrDoc剪藏:操作失败!', message: data },function(id){ setTimeout(() => { chrome.notifications.clear(id) }, 3000); }); }; mrdocclipperisreadyHandlerConnect = function(port) { var self = this; port.onMessage.addListener(function(msg) { ReadyErrorNotify.close(); }); }; mrdocclipperisnotreadyHandlerConnect = function(port) { var self = this; port.onMessage.addListener(function(data) { data = data || {}; // ReadyErrorNotify.show(data.key); notifyTipsFail(data.key) }); }; //来自popup注入器的处理操作 actionfrompopupinspecotrHandler = function(port) { var self = this; port.onMessage.addListener(function(data) { console.log("页面剪藏数据") console.log(data) //发送到popup chrome.tabs.sendMessage(port.sender.tab.id, { name: 'actionfrompopupinspecotr', data: data }); }); };