From 9c59c632e7ddc9cd251e01a390cd9e65bbc26698 Mon Sep 17 00:00:00 2001 From: Coding Zhang <2291200076@qq.com> Date: Sun, 6 Feb 2022 02:40:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E9=A1=B5=E6=88=AA=E5=9B=BE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=9B=9E=E8=B0=83=E5=87=BD=E6=95=B0=E4=BC=A0=E5=8F=82?= =?UTF-8?q?=E4=B8=BAnull=E9=97=AE=E9=A2=98=E4=BD=BF=E7=94=A8=E5=8F=98?= =?UTF-8?q?=E9=80=9A=E6=96=B9=E6=B3=95=E8=A7=A3=E5=86=B3=EF=BC=9B=E8=A7=84?= =?UTF-8?q?=E8=8C=83chrome.runtime.sendMessage=E4=B8=8Echrome.runtime.onMe?= =?UTF-8?q?ssage.addListener=EF=BC=9BTODO:=20=E9=BC=A0=E6=A0=87=E6=A0=B7?= =?UTF-8?q?=E5=BC=8FonMessage=20Listener?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/html/pomodoro/assets/js/popup.js | 9 ++++-- .../assets/html/pomodoro/background.js | 8 +++++ .../assets/html/screenshot/background.js | 10 +++++++ .../assets/html/screenshot/js/content.js | 30 ++++++++++++------- packages/shell-chrome/assets/js/background.js | 16 ++++++++++ .../assets/js/mouse-effects/click.js | 10 ++++++- .../assets/js/mouse-effects/mouse-style.js | 10 ++++++- 7 files changed, 78 insertions(+), 15 deletions(-) diff --git a/packages/shell-chrome/assets/html/pomodoro/assets/js/popup.js b/packages/shell-chrome/assets/html/pomodoro/assets/js/popup.js index 25f3955..122fa0a 100644 --- a/packages/shell-chrome/assets/html/pomodoro/assets/js/popup.js +++ b/packages/shell-chrome/assets/html/pomodoro/assets/js/popup.js @@ -84,6 +84,7 @@ function start() { chrome.runtime.sendMessage( { status: "start", + senderId: "pomo", content: { minutes, seconds, @@ -108,6 +109,7 @@ function end() { chrome.runtime.sendMessage( { status: "paused", + senderId: "pomo", }, (response) => { console.log(response); @@ -130,16 +132,17 @@ function getTimer() { //更新后倒计时判断,如果结束则重新初始化界面 if(pomoData.countdownTimer == "00:00"){ - audio.play(); + audio.play(); //不能放在页面上,要在后台进行 chrome.runtime.sendMessage( { status: "playend", + senderId: "pomo", }, (response) => { console.log(response,"**************下面"); countdownTimer.innerHTML = "25:00"; - + startBtn.style.display = "block"; endBtn.style.display = "none"; clearTimer(); @@ -178,6 +181,7 @@ resetBtn.addEventListener("click", () => { chrome.runtime.sendMessage( { status: "reset", + senderId: "pomo", }, (response) => { // console.log(response); @@ -209,6 +213,7 @@ chrome.storage.sync.get("pomoData", ({ pomoData }) => { } else if (status === "init") { chrome.runtime.sendMessage({ status: "init", + senderId: "pomo", }); countdownTimer.innerHTML = "25:00"; }else if(status === 'playend'){ diff --git a/packages/shell-chrome/assets/html/pomodoro/background.js b/packages/shell-chrome/assets/html/pomodoro/background.js index a017fcd..b73afc7 100644 --- a/packages/shell-chrome/assets/html/pomodoro/background.js +++ b/packages/shell-chrome/assets/html/pomodoro/background.js @@ -22,6 +22,12 @@ let array = ["minutes", "seconds", "pause", "countdownTimer", "pbutton"]; let timer = null; chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { + console.log(`进入 assets\html\pomodoro\background.js 中的onMessage Listener`) + if (message.senderId !== "pomo") { + // 抛给下一个Listener + sendResponse(); + } + const { status, content } = message; if (status === "start") { @@ -78,6 +84,8 @@ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { // audio.play(); } sendResponse(); + console.log(`离开 assets\html\pomodoro\background.js 中的onMessage Listener`) + return true; }); // 番茄钟倒计时功能 diff --git a/packages/shell-chrome/assets/html/screenshot/background.js b/packages/shell-chrome/assets/html/screenshot/background.js index 14e46cd..9e9d428 100644 --- a/packages/shell-chrome/assets/html/screenshot/background.js +++ b/packages/shell-chrome/assets/html/screenshot/background.js @@ -37,7 +37,13 @@ function inject(tab) { var takeScreenshot = inject chrome.runtime.onMessage.addListener((req, sender, res) => { + console.log(`进入 assets\html\screenshot\background.js 中的onMessage Listener`) + if (req.senderId !== "screenshot") { + // 抛给下一个Listener + res(); + } if (req.message === 'capture') { + console.log("capture开始") chrome.storage.sync.get((config) => { chrome.tabs.getSelected(null, (tab) => { chrome.tabs.captureVisibleTab(tab.windowId, { format: config.format }, (image) => { @@ -46,7 +52,10 @@ chrome.runtime.onMessage.addListener((req, sender, res) => { crop(image, req.area, req.dpr, config.dpr, config.format, (cropped) => { // 裁剪后 // console.log("cropped", cropped) + console.log("capture结束") res({ message: 'image', image: cropped }) + // 回调有问题,参数么有传回去,使用以下变通方式直接转换为可下载的文件 + var link = document.createElement('a'); link.download = "学生助手 屏幕截图 " + Date.now(); link.href = cropped; link.click(); }) }) }) @@ -62,6 +71,7 @@ chrome.runtime.onMessage.addListener((req, sender, res) => { // chrome.browserAction.setBadgeText({tabId: sender.tab.id, text: ''}) } } + console.log(`离开 assets\html\screenshot\background.js 中的onMessage Listener`) return true }) diff --git a/packages/shell-chrome/assets/html/screenshot/js/content.js b/packages/shell-chrome/assets/html/screenshot/js/content.js index 965668a..3e63091 100644 --- a/packages/shell-chrome/assets/html/screenshot/js/content.js +++ b/packages/shell-chrome/assets/html/screenshot/js/content.js @@ -1,11 +1,11 @@ -var jcrop,selection +var jcrop, selection var relativePath = 'assets/html/screenshot' var overlay = ((active) => (state) => { active = typeof state === 'boolean' ? state : state === null ? active : !active $('.jcrop-holder')[active ? 'show' : 'hide']() - chrome.runtime.sendMessage({message: 'active', active}) + chrome.runtime.sendMessage({ message: 'active', senderId: "screenshot", active }) })(false) var image = (done) => { @@ -33,7 +33,7 @@ var init = (done) => { selection = null }, 100) } - }, function ready () { + }, function ready() { jcrop = this $('.jcrop-hline, .jcrop-vline').css({ @@ -53,13 +53,15 @@ var init = (done) => { var capture = (force) => { chrome.storage.sync.get((config) => { + console.log(config) if (selection && (config.method === 'crop' || (config.method === 'wait' && force))) { jcrop.release() setTimeout(() => { + console.log("准备capture") chrome.runtime.sendMessage({ - message: 'capture', area: selection, dpr: devicePixelRatio + message: 'capture', senderId: "screenshot", area: selection, dpr: devicePixelRatio }, (res) => { - console.log("res: ", res) + console.log("capture回调结果:", res) overlay(false) selection = null save(res.image, config.format, config.save) @@ -68,8 +70,8 @@ var capture = (force) => { } else if (config.method === 'view') { chrome.runtime.sendMessage({ - message: 'capture', - area: {x: 0, y: 0, w: innerWidth, h: innerHeight}, dpr: devicePixelRatio + message: 'capture', senderId: "screenshot", + area: { x: 0, y: 0, w: innerWidth, h: innerHeight }, dpr: devicePixelRatio }, (res) => { overlay(false) save(res.image, config.format, config.save) @@ -89,10 +91,10 @@ var filename = (format) => { } var save = (image, format, save) => { - var link = document.createElement('a') - link.download = filename(format) - link.href = image - link.click() + var link = document.createElement('a') + link.download = filename(format) + link.href = image + link.click() } @@ -105,6 +107,11 @@ window.addEventListener('resize', ((timeout) => () => { })()) chrome.runtime.onMessage.addListener((req, sender, res) => { + console.log(`进入 assets\html\screenshot\js\content.js 中的onMessage Listener`) + if (req.senderId !== "screenshot") { + // 抛给下一个Listener + res(); + } if (req.message === 'init') { res({}) // prevent re-injecting @@ -119,5 +126,6 @@ chrome.runtime.onMessage.addListener((req, sender, res) => { capture(true) } } + console.log(`离开 assets\html\screenshot\js\content.js 中的onMessage Listener`) return true }) diff --git a/packages/shell-chrome/assets/js/background.js b/packages/shell-chrome/assets/js/background.js index 3dbd523..83c35fb 100644 --- a/packages/shell-chrome/assets/js/background.js +++ b/packages/shell-chrome/assets/js/background.js @@ -10,6 +10,22 @@ chrome.contextMenus.create({ // 打印消息日志 chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { console.log("request", request, "path", sender.url.replace(sender.origin, ""), "sender", sender, "sendResponse", sendResponse); + + console.log(`进入 assets\js\background.js 中的onMessage Listener`) + + // 抛给下一个Listener + sendResponse(); + + console.log(`离开 assets\js\background.js 中的onMessage Listener`) + + return true; + + /** + * refer: + * https://stackoverflow.com/questions/4924125/can-chrome-extension-background-pages-have-multiple-listeners + * https://developer.chrome.com/extensions/runtime#event-onMessage + * https://blog.csdn.net/lamp_yang_3533/article/details/100174074 + */ }) diff --git a/packages/shell-chrome/assets/js/mouse-effects/click.js b/packages/shell-chrome/assets/js/mouse-effects/click.js index c1a9026..3261317 100644 --- a/packages/shell-chrome/assets/js/mouse-effects/click.js +++ b/packages/shell-chrome/assets/js/mouse-effects/click.js @@ -7,10 +7,18 @@ $(function() { // 每次改变开关状态时刷新页面使功能及时生效 chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { - // TODO: 这里不能这么写,否则会导致其他模块发送消息时触发页面刷新 + console.log(`进入 assets\js\mouse-effects\click.js 中的onMessage Listener`) + if (request.senderId !== "mouse-effects") { + // 抛给下一个Listener + sendResponse(); + } + // TODO: 这里不能这么写,否则会导致其他模块发送消息时触发页面刷新 // console.log('click'); // location.reload(); // sendResponse('Reload page'); + + console.log(`离开 assets\js\mouse-effects\click.js 中的onMessage Listener`) + return true; }) // 控制功能是否开启 diff --git a/packages/shell-chrome/assets/js/mouse-effects/mouse-style.js b/packages/shell-chrome/assets/js/mouse-effects/mouse-style.js index a1b2b53..b72757a 100644 --- a/packages/shell-chrome/assets/js/mouse-effects/mouse-style.js +++ b/packages/shell-chrome/assets/js/mouse-effects/mouse-style.js @@ -6,10 +6,18 @@ $(function() { console.log("[BitDance extension] 学生助手插件 - 鼠标样式模块加载成功"); // 每次改变开关状态时刷新页面使功能及时生效 chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { - // TODO: 这里不能这么写,否则会导致其他模块发送消息时触发页面刷新 + console.log(`进入 assets\js\mouse-effects\mouse-style.js 中的onMessage Listener`) + if (request.senderId !== "mouse-effects") { + // 抛给下一个Listener + sendResponse(); + } + // TODO: 这里不能这么写,否则会导致其他模块发送消息时触发页面刷新 // console.log('mouse'); // location.reload(); // sendResponse('Reload page'); + + console.log(`离开 assets\js\mouse-effects\mouse-style.js 中的onMessage Listener`) + return true; }) // 控制功能是否开启