From 75dd38dcfc001ae918ca60047fb386ad3d3da05d Mon Sep 17 00:00:00 2001 From: lunaticbum Date: Tue, 11 Feb 2025 17:39:20 +0900 Subject: [PATCH] o k a y --- LICENSE | 21 +++++++++++++++ background.js | 34 +++++++++++++++++++++++ button.css | 13 +++++++++ images/icons8-color-128.png | Bin 0 -> 7383 bytes images/icons8-color-16.png | Bin 0 -> 549 bytes images/icons8-color-32.png | Bin 0 -> 1102 bytes images/icons8-color-48.png | Bin 0 -> 1621 bytes images/icons8-color-64.png | Bin 0 -> 2294 bytes manifest.json | 25 +++++++++++++++++ options.html | 14 ++++++++++ options.js | 52 ++++++++++++++++++++++++++++++++++++ popup.html | 11 ++++++++ popup.js | 48 +++++++++++++++++++++++++++++++++ 13 files changed, 218 insertions(+) create mode 100644 LICENSE create mode 100644 background.js create mode 100644 button.css create mode 100644 images/icons8-color-128.png create mode 100644 images/icons8-color-16.png create mode 100644 images/icons8-color-32.png create mode 100644 images/icons8-color-48.png create mode 100644 images/icons8-color-64.png create mode 100644 manifest.json create mode 100644 options.html create mode 100644 options.js create mode 100644 popup.html create mode 100644 popup.js diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9a645a6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 cho yeon seop + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/background.js b/background.js new file mode 100644 index 0000000..d08d17f --- /dev/null +++ b/background.js @@ -0,0 +1,34 @@ +/** +* --------------------------------------------------------------------------------- +* | 백그라운드 | +* --------------------------------------------------------------------------------- +* - 디폴트 컬러를 지정하여 스토리지 API 를 호출하여 지정한 색을 저장시킵니다. +**/ +let color = '#3aa757'; + + +chrome.runtime.onInstalled.addListener(() => { + chrome.storage.sync.set({ color }); + console.log('기본 배경색은 %cgreen', `color: ${color}`); +}); + +chrome.webNavigation.onCompleted.addListener((details) => { + // console.log("details.url", details.url) + console.log(`B`); + if (details.frameId === 0 && details.url.includes("booktoki")) { + console.log(`A`); + chrome.scripting.executeScript({ + target: { tabId: details.tabId }, + function: () => { + const title = document.title; + alert(`Page Title: ${title}\nPage Load Complete!`); + } + }); + } else { + console.log(`Page Title: ${title}\nis not target Page!`); + } +}); + +chrome.runtime.onInstalled.addListener(() => { + console.log('Page Load Notifier installed.'); +}); diff --git a/button.css b/button.css new file mode 100644 index 0000000..66b2a79 --- /dev/null +++ b/button.css @@ -0,0 +1,13 @@ +button { + height: 30px; + width: 30px; + outline: none; + margin: 10px; + border: none; + border-radius: 2px; +} + +button.current { + box-shadow: 0 0 0 2px white, + 0 0 0 4px black; +} \ No newline at end of file diff --git a/images/icons8-color-128.png b/images/icons8-color-128.png new file mode 100644 index 0000000000000000000000000000000000000000..9a58e15f4afc7050b0b34f5f7f7d9e9a92acd35a GIT binary patch literal 7383 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 NNlsn1PTC^ue*g+3I(+~D literal 0 HcmV?d00001 diff --git a/images/icons8-color-16.png b/images/icons8-color-16.png new file mode 100644 index 0000000000000000000000000000000000000000..62449e91037d0926bb002f60e13b27c96a2959c0 GIT binary patch literal 549 zcmV+=0^0qFP)EfA3xMbxBD~6OueA^Bqoc`ix3PfNJMDNq zM*ssb>>ww0#+>_D|GrONU z7ywm-HHkT!V>eqFw_~hzJu?%?Z>(#9x57fq2@WOh`_IfA+di{>}J4=Yd!Vvp~wJHXIz4O0-8Wml-^Lg n$t!xqGx$7q>+@eg{)hSnVDO$ig%_v;00000NkvXXu0mjft1R?X literal 0 HcmV?d00001 diff --git a/images/icons8-color-32.png b/images/icons8-color-32.png new file mode 100644 index 0000000000000000000000000000000000000000..9efa7bd2e17b8d0833cd801e3f7875164ceb04df GIT binary patch literal 1102 zcmV-U1hM;xP)0+rs8BVH7Z?I)wm|J4h0@a2?e5O; zq6@Y&v%5vTlXErmeeZeSch33d%)pKKzlU58c%q`BFcynFE>I(|NFguIaSr%RpcB7# z2EP5d?>{wgp}xMr5^IY@qxbpG_CAmdJ5nXzMCZ$(M$DGtremRhZD4Ty+Q)!Bz&yb6 zo$Kv0k!XP%R@1pWTx-&R05GP=GsQ0-{~{T`Nwzt(q3%WC%eXjznaT~GNra!gTe{=o z09k^z_q<*4!ap)Fuzu|tRe8sbvHboeDiU!d2s*h?itPNV`fkr#OIIh-acx1o=O=+o zw|(#M#Y5iFE4`w6N<|dal5nvp8e2wX0-aG~c^5C(`rRM)jWjp3C9xeKZsK84nlGgL zJ}CL|Xn5wviJJ2C0D%Ue709sVWm_h)4cKTWbX4H!x}m%V@0)uT>hDYWyPwnIMpoYZ z>AtVsOka)A8x;>@^dOKvV>w19UHag7U2*w|{+W2k8Mxy0t$AIxKeS19S%>A(@1uA_ z03!NIDsh0@w;n%=XmkAW2DN}Aks7OSs@hsUmF=ss;~fT6v>ISs{8@YDiTj^39~OON zo;@<(^6W|_el;TLm)?)vtB0o6S;5E(t5O3L0vMI*lm-M!W*I`{7|TP_);2X)10~O& z2}et{AA@%`mzJh9062z>D5vKtel15h>0C8=b1|Uy1xu0-EVob>9#F@jcOxEffP_1* z*MK07a)UbNfSZ9+w)=?sG=J4jwZGd5W0f{$bbIq|vsXb8M=ME*Az@T3u;HURf<|)F?$e=7sf_^+BnhuWZ8n*CJvBcDF@fK zUfNv0L(}bftF$qrcBJVg7jb~VdC$Bvc5z7XF{*#{LP6Aceig`eeas4uNRf3`R8OPg zL9|pn!?(tQA6L2J;fg0FWo`3Ydgo*Sp!T)lm7-=p*eYQNnL4WoapXp=;O=2OW4GAW zRYf**h5B z>s{782@}GLOTfh9cVi&yJ`c9OmrNt&gllgOc6vy=LtrPlbV&v|iP4g8{w(i8*&U5W z%i4o29jW-Q>$kivG?eFwdRD7a4Y~-(XSzlGf}B$HfTWG?Z!0eDPeFAfZp5|t3z1G{ UUqBR7cK`qY07*qoM6N<$g5RqWc>n+a literal 0 HcmV?d00001 diff --git a/images/icons8-color-48.png b/images/icons8-color-48.png new file mode 100644 index 0000000000000000000000000000000000000000..863937e6b93af946c999830591b7c2ffd5b68346 GIT binary patch literal 1621 zcmV-b2CDgqP)_|u zvYE>CN24`1){Oq)N2Fs;&ScFL+SH6wT8R8;rZg)J1ZG^&#)NTHPy}uGP&Va5SnhfI zVI|n!k6oGZ56{o@KIeI#ch5a%-*Yc8j&Y1*9FG$;RzmkOGvj^C%LvE?a}tPL02}}q zfEPe3fF>fUBH)7Zu4}P~4%NU4?Srz}f)xgs`LX)-w6X)VSDkT2rnB z>p=>3V#nIm`CTOb08#mnGs1!TH zJI26}^?Lgq8djb(qQMe;-Gx#QNr-wdhy$`o-s0L?HxP)QfL5TRcx7}biPIQi9sme1 z`ywJ5jq2P>z?o6z?~80u6s7vghuKjo)BM740UgCFqe+BR1DNeEu7ug9fk+t98c31C zR6^+{3h8?> zM6?G$hOQ!^F|PMaDwRNWZ)rY4-6Yn)fO#gAMY5EuXC45ae%JF`T%R=y#GmSM!I;r% zo$J=3Xs*D{$xxzV{8j^`cwBH<3|kN_Y_AXc$fv%?Z!e zzoMq0TEL2;+p)52x(Yy&p$skHpX-;4@55}=mpX#xiF8cNp|UbxFa`I>6@Mk~;yjXm96ET1G@c0yNYboZh+o$uz42kf9k;g_0 zEqgNaB&L%*fqv&?F{n)AIV?eb$mXkwv7WC2Dqz*RI|l*0tQNPTzvi36Pvr*bdlarT zWmbtWo~J?iGBLLPHGcv1P0XC4m9!tWka__`v09o$!lP%*D40c^ zCV>#A7ScLKpU@N)vfoV=42VhZ-&xg5(Dwm_d_m9sKS-|yQQfN=djP#!iY7>tb&?u} zkTFSz@|RjbwE!Yq*HTmnSvpCLL-1V9IHOf9q*{O=ZqgJb(mM76!k}bctep!N)k3NT zNGzT9Gb|{C&q|ZHPM)D;yLWmQ8n@{m1wA|RN^A>e@3rOBv`XQZ{IjS^ZNBQ}D16Bq zuL$YNKb&r|i$tjNIdaNNXeb!-MOIlm{BW;5qrfA~`_(1xO!jp) zEg5XSl^b(vwVH-WD*-*DQ~+GA#bMAJ1*JVC`y6i?U5TZUG7^*zc`v z6sIpoHz$D_Ua17rA! zY2C%H$%;hzOq2&88H89c?707lsgHnb3^Xxu6%X-GN0TGR>_#_^ag1Xej}LzXDoY~C TYRb;b00000NkvXXu0mjfufPQ( literal 0 HcmV?d00001 diff --git a/images/icons8-color-64.png b/images/icons8-color-64.png new file mode 100644 index 0000000000000000000000000000000000000000..fd2bec4dd4f52db0268cad9cb70874a0e459f00e GIT binary patch literal 2294 zcmV+RM#2D|IfL*C@!$TN)%9ZRL~kzMS1b1zD&lNHe-pR zTVp$uu}w!!nq)M#Vbn~Un5YxY%cM;wF`c%i(^xHGF?G_U!#J&FtSD>Lv|~k$VpNbt z&;?QS-g};Y05TNUz31MAeChta?e72l&vTx=FXuex0CD2Pi4!MIoc~wotLUU7KR=5# zZ7u;b85j@dTnOO>a|!?kQ9GDJ0M3Evq#!z|YuW+tp+l_$9ov8ihKvt#kSF@+9vj;FcZA8#_S z-5AumHTRjbw_}YN=%)lU`~Bk?@{b_o_xY(KvHqe-Ql>ceUMkLzhTJ}1pO8{68&ejn zbL!iJh}9tEFI~zcgAoP~03IXNd)%q_ooqT5VekMjSqKrV-&VZDsdo=CB_QpXx|FY{Z6DeeR zP+%b=0>4rJYT=W1{d;hffY7p~ej>c3s=wn)zhSqJ8&h!-fLlq-^o#oKMT_nB0XRrN zXvvaXF#pC*Thr~D#xAWzRnG$Yoour6`qTjY{@g1C<88D7U^4;i_a{K$0|3c(+7XbT zr>CCmYX{&8fCd0&?;mcBqoW`Uv(pEFBq3;5aK|*YtEL-U3226V7KE?ci>nLWOT4pN@#xXKv!SLM` zhi$d%Mb1xZYlTcG1aQnwI|5d>{%O8fMXQv6kG0~ZPigNae@Kh}u49nO^s`Yjxg;YH zXjJi!Mo!tm24;R3z-0w_C#Ryum@k`}i?1zG@mG2VEMDGrfEjaoK0m;ponFejuV{Zn|MS%9HY8hlXHCA~GL|TtWgoJCqs@6I3 zuc}H?h+QQC>5Bas+MUD!yZn0yhwufu3Z|AY;Iq=GBtUiH6Dlt!(^?iA1qDZSFkMxY z-?LEDL(CuP{7(MC8i6M_z6ju-l-d`MIo3o_Qnw;m)ZsN$6I3A+2M# zd}xtd9ALv_M4EJKI6*_rR?4915L^TR8q@OtR$2Kv!L7Mp=pZim%isz41mm0Y^s6Vo zbNf`Tk8efVdoW#6ueS13S`IIIw5J;j<_(!};Rt{c(R41B^^?sj7as0BJ=w$h+Ps|FomSpT3GkP-dQC4~ z0H9Q6>gJfC84LehmJ!o-c1iPdS#Fo>BL=3Zwjpq+wC%!#?~mHmAFn~6{FU@Dz&lg} z=qBG~x@t?eh6`=B`;x^i>u0!JuArU40|0~es0<#kQ5N@a3k^36cO7-_{oB9*^KT88 z`J(F8@JP$Xk(%J20ayY1W$~M)qzNDTHeXZ`+d3amy7}5V5MH$zP#1#`)Jpi01n+Yb zs?4$J4dv9ecv=}`ci0=wF(Dr!aEY0|GZ&&|jFWDN@q9)4md(m~JLW5Qu={Gu^%?+E zZ3i}4)=(aLpB0iIG=U+2KHFff^VKpn;N)bh1lFfj5?FN;Ql}}>_O>;56e&M!33xV;y7dFQ zeE=~OL@G9D8`E|Y z(W3y`@1>!93~}l&I_5^JF}4HbuT0xc4!;4gfD| zsR=VGyf0f8JCu6p50l=MZf?$maIIrtxwgnmhKp<+r|ApBILAZZ^bzA7=}vgPGWms2 zf5i$6;9+ThRjU`H + + + + + + +
+
+

배경색 변경

+
+ + + \ No newline at end of file diff --git a/options.js b/options.js new file mode 100644 index 0000000..7c2e288 --- /dev/null +++ b/options.js @@ -0,0 +1,52 @@ +/** +* --------------------------------------------------------------------------------- +* | 옵션 | +* --------------------------------------------------------------------------------- +**/ + +// button element 요소 +let page = document.getElementById("buttonDiv"); +// CSS 클래스명 +let selectedClassName = "current"; +// 제공할 배경색 목록 +const presetButtonColors = ["#3aa757", "#e8453c", "#f9bb2d", "#4688f1"]; + +/** + * @param {object} event - 이벤트 + * @description 스토리지 API 를 호출하여 배경색을 저장하고 현재 웹 페이지의 배경색을 변경하여 줍니다. + **/ +function handleButtonClick(event) { + let current = event.target.parentElement.querySelector(`.${selectedClassName}`); + if (current && current !== event.target) { + current.classList.remove(selectedClassName); + } + + let color = event.target.dataset.color; + event.target.classList.add(selectedClassName); + chrome.storage.sync.set({ color }); +} + +/** + * @param {object} buttonColors - 버튼 컬러 목록 + * @description 제공할 배경색을 웹 페이지에 표시하여 줍니다. + **/ +function constructOptions(buttonColors) { + chrome.storage.sync.get("color", (data) => { + let currentColor = data.color; + for (let buttonColor of buttonColors) { + let button = document.createElement("button"); + button.dataset.color = buttonColor; + button.style.backgroundColor = buttonColor; + + if (buttonColor === currentColor) { + button.classList.add(selectedClassName); + } + + button.addEventListener("click", handleButtonClick); + page.appendChild(button); + } + }); +} + +// 최초 버튼 컬러 표시 및 이벤트 등록 호출 +constructOptions(presetButtonColors); diff --git a/popup.html b/popup.html new file mode 100644 index 0000000..7f0e61b --- /dev/null +++ b/popup.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/popup.js b/popup.js new file mode 100644 index 0000000..8276e7e --- /dev/null +++ b/popup.js @@ -0,0 +1,48 @@ +// /** +// * --------------------------------------------------------------------------------- +// * | 팝업 | +// * --------------------------------------------------------------------------------- +// **/ +// +// // changeColor ID element 를 취득 +// let changeColor = document.getElementById("changeColor"); +// +// // 스토리지에 저장되어 있는 컬러가 있다면 표시 +// chrome.storage.sync.get("color", ({ color }) => { +// changeColor.style.backgroundColor = color; +// }); +// +// // 배경색 버튼을 클릭하였을 경우 이벤트 등록 +// changeColor.addEventListener("click", async () => { +// let [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); +// +// chrome.scripting.executeScript({ +// target: { tabId: tab.id }, +// function: setPageBackgroundColor, +// }); +// }); +// +// /** +// * @description 현재 웹 페이지의 Body 요소의 배경색을 변경해주는 함수 +// **/ +// function setPageBackgroundColor() { +// chrome.storage.sync.get("color", ({ color }) => { +// document.body.style.backgroundColor = color; +// }); +// } +// +// // document.getElementById('checkPage').addEventListener('click', () => { +// chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { +// console.log("IN ACTIVE") +// chrome.scripting.executeScript({ +// target: { tabId: tabs[0].id }, +// function: () => { +// console.log("IN ACTIVE 2") +// window.addEventListener('load', () => { +// const title = document.title; +// alert(`Page Title: ${title}\nPage Load Complete!`); +// }); +// } +// }); +// }); +// // }); \ No newline at end of file