From a6857505ef4c306d151363e89d5b41a0ef33c94d Mon Sep 17 00:00:00 2001 From: lunaticbum Date: Fri, 13 Nov 2026 15:08:05 +0900 Subject: [PATCH] ... --- app/src/main/AndroidManifest.xml | 4 +- .../extensions/my_extension/Novel_Scraper.zip | Bin 10878 -> 0 bytes .../my_extension/Novel_Scraper/manifest.json | 6 +- .../extensions/my_extension/orion_dram.zip | Bin 4528 -> 0 bytes .../generated_indexed_rulesets/_ruleset1 | Bin 0 -> 659 bytes .../my_extension/orion_drama/background.js | 18 +- .../my_extension/orion_drama/dramadunyam.js | 110 ++ .../orion_drama/f_ori/background.js | 16 + .../orion_drama/f_ori/f_ori_drama.zip | Bin 0 -> 3252 bytes .../orion_drama/f_ori/manifest.json | 20 + .../orion_drama/f_ori/messaging.js | 83 ++ .../orion_drama/fox_ori_darama/content.js | 35 + .../orion_drama/fox_ori_darama/inject.js | 17 + .../orion_drama/fox_ori_darama/manifest.json | 33 + .../fox_ori_darama/ori_drama_ext_3.zip | Bin 0 -> 3702 bytes .../orion_drama/fox_ori_darama/popup.html | 15 + .../my_extension/orion_drama/manifest.json | 23 +- .../my_extension/orion_drama/messaging.js | 113 +- .../my_extension/orion_drama/orion_drama.zip | Bin 0 -> 3696 bytes .../my_extension/orion_drama/rules.json | 15 + .../extensions/my_extension/reader.html | 1106 +++++++++++++---- .../launcher/apps/AppDrawerBottomSheet.kt | 374 ++---- .../launcher/home/CompletedFilesActivity.kt | 452 ++++++- .../launcher/home/VideoPreviewBottomSheet.kt | 194 +++ .../launcher/home/WebReaderActivity.kt | 10 +- .../lunatic/launcher/receiver/NLService.kt | 79 ++ .../res/layout/fragment_completed_files.xml | 63 +- 27 files changed, 2119 insertions(+), 667 deletions(-) delete mode 100644 app/src/main/assets/extensions/my_extension/Novel_Scraper.zip delete mode 100644 app/src/main/assets/extensions/my_extension/orion_dram.zip create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/_metadata/generated_indexed_rulesets/_ruleset1 create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/dramadunyam.js create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/f_ori/background.js create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/f_ori/f_ori_drama.zip create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/f_ori/manifest.json create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/f_ori/messaging.js create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/content.js create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/inject.js create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/manifest.json create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/ori_drama_ext_3.zip create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/popup.html create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/orion_drama.zip create mode 100644 app/src/main/assets/extensions/my_extension/orion_drama/rules.json create mode 100644 app/src/main/kotlin/bums/lunatic/launcher/home/VideoPreviewBottomSheet.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 618d4708..e62012ae 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -144,12 +144,12 @@ android:theme="@style/Theme.Player" android:icon="@drawable/ic_launcher" android:roundIcon="@drawable/ic_launcher" - android:label="리더" + android:label="파일즈" android:configChanges="orientation|screenSize|screenLayout|smallestScreenSize|density|fontScale|keyboardHidden|keyboard|layoutDirection|navigation" android:screenOrientation="portrait" android:excludeFromRecents="false" android:hardwareAccelerated="true" - android:taskAffinity="bums.lunatic.launcher.home.WebReaderActivity" + android:taskAffinity="bums.lunatic.launcher.home.CompletedFilesActivity" android:launchMode="singleTask"> diff --git a/app/src/main/assets/extensions/my_extension/Novel_Scraper.zip b/app/src/main/assets/extensions/my_extension/Novel_Scraper.zip deleted file mode 100644 index 1d1d82c0a988057e9a4b1ff37e4ee165716629dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10878 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%0DR z%fuB`#ce-~%+f9c#nZ0T#J&iv<*+3l3&ptmoBvxS0$9ipgRWjWv|(`RM!((Zz+XU?$+@t6TkZ9Q`(0sh;=tALs|1eZ;Url# z=95&kApH+jDv<+uVgomlt{m#d5Qq*mj?SrUu8U=zFDBHS;^yhj{p4_mmrFnR>GQE> zO~MK@dML|)i=3$;dlg3~OJx-KBDlY8cJap6uAlGY^v2G&U{uwzyfQhUV)ssF93+)R z8FwF94aSHqiV@3&J}p8Qw7GEMi?9zGQO8fR82UuX#0;gC#pW$B2dl|z60w{}OI^d? z(8osM5oZy^;dmFGT>E*<=Lol^)AtLoGU|SR?%RDMr6}h8ZDTRk%PMi!$WB#3$g3YS zL##01*^r)0pB(UI&wm~fPBtLxp$pUI#l8V;&ze^etuacF9Q9)4V`? zVQ=_ObAgJEywy{e&Lp-7!nA+zGh~y{S90CeavqoR6X}{)#{)rJJ|=CFM;Ir^amYbp zlRmdDjcZlq!V(QlEs6eTgI1Lc~AMY z>>aMTr!_|?>%{O7h!MO(^Mlzcqf&=%>4EgT#2{QO55mg-#Od7VaM$SfWv=IZ+4U$- z`qJMfxVa`|Wsz*pbGEp2F6#sju@@PK20KF>uCpK4t6!;@=M&pGT6rqWrl(^kBke1x43xRp(Tf7klmm&#ZP83cLDdJ`@lFk z6j}SO{N32GTZ)UXMKn}Jq58GDV&`h>&_7Zxs%0_cIKVVGg-OXIQ~EfdQa98(8th@Q zDh8ow(n_eiFL)3a`=t(L@!>HI{;XDjof&2xCk?BBh}o#)dxxiiig^%e%=J|yd8d!6 zVYanXDn%N=@XBnFtI5A;q#K%Ygz&YN|<>3o*dJ&Ak zyP5vB$@k=-jB#tn>GJ*iUD1JA58C0~b7;!L(G$vqES9Pb1(|f|pZoo2r%k4~S6T~| zg$q*c1`6#KGV}6R6biJXJCX-WupqdQHHXhUN~t7zT0P}tepW>7!-f!Dzvkin+!FMJ z_nZq?;ed)gv$^lu>=!1jQZQb=vyKGc>Q6ct500dIXWSBu;c60pr{>bcxQm z=}Iz-hzC){0)p@;;t*=qsG2v+EpdDTHVem&s+l~~`V8qya^*-~(D;W_oK_U`+>sXa zx4X;2D9%RqUS%={Rn%U}<-^57VHp;g&V@BaH>4tTJ{F~IN-ZVpGoCM4crW4$BFk!} z=@|7!t4L;v(U-vA(S-(HpN2;Kc(be?UdkzQb9arJ;1K9EZAY!)a@B98c7tS1=^ubs zk9mvqa6s{qqHE41j<2s^Y%h$;9KNP4OtO%UJgrExVy!~n&yKg9!}E+Whz?DW;~=~| zBlS|BQY&t^U%ENG&NpNuNe$IJZaDu0hY_Iw&hPc_&dcfY^& z8vfo!`2Xi79t<1<;$Pi|dhmMzhAZ!SGOxWIaXUKjxLAeW!d_+Oq-JYYZGUwS(8N9?CFCwYcVhWKRW z&x8EtAmlH?Ji72t{dw$XVL%UI{($~3k18I(ACD=Xa(D!P>Z_AJ1HVW54Tpbi`2R(m zN4xE*5%)C9g#m@geF!{G*Jz5J-O^4@&6@&dpGXL6Lcp&mz7F^TG;x_>KRcpY`)4V=(-;;ym`&r(O4XVM*iuk;HG>>jR5Nf8i;MNA#yGo)?xR a`EOYKoj_189(yLz!=Db+!;|9izyAWuOY z6vt9JMI_miB;PxI=bUdi@$3BYecwC3=Y8IP=DMHzzV7F~uN$RJM$QBfp6NhGi*Fx) zyl4Oz;OgP%inX%yuyL^w_x7a*NXXYo0N~pnj0|akL+7x|PJb@cHzZ1c@^45`5Xs6) zS6Nlh04*+NMFe^frXGlGYt3xyV2!a}($z6uI$|7&3MP$bA>*fKCvoSd5B(Iw8c7<* z&8>{$(`=)G&1e`jN75hD?d^M}Eh5l<_L;Cir?_^HcDMF9duuz)r(2tI=XF)8C;^oA zA<9>pSvX_R(`<0hzU-*0a$DG zj>9zo#3XZLfP0Lgf=M5B@|s`5x^Z-nBZnR^x>REoOasHm!W9xmp?)DRCGQ;xFZ1$bzjsK^$5zr}R!h3N+$xjj?ySzSy1||v)h-r=8^Y{IqfdpS zaq}kkMV`ELbDQ4WQnZoUq2>-`iFxhKu|!ASMR(t4{$0enw$jqQ@OY-7UngZu`~q;W+^uL9P{Od9&MEwE_a z7D0$oH95sA#VL%c3nXhPv56f`lbS}x^Qr+t;rBx*v~d0N(W-|Ta}7&+)xwT*ehtpZ zQRc}rO^wG0WhC{rR1G1w8A?n#XFgEfk{=QCOyPgclWG~4C*87CWQ$d7TGMMDnqR`C zlMQWAiZA9%hobG473DlHb7aVe_ZcHNBOF?MO}wU>D_h8?L#_u#bmxA2?8SDAu@B#v zq)xHQ#Czs?mw$v|zb#c^gs9jYoxgPutil8)`$j6^;WocNy zmgtKxIp<$JK001IK65Nn%hRhXUp-# z4U*LRI9Y|8`Uw8JGM1?Ura5Vy&_)sh+Ypz==IbN?U_wfqkbBwY-9I6JnD~Q}^1oAU zBz$&fEz6#)b+PyKv~h66I_#6Q3zo}HOW-2xxh7VwN6*j)ZRDeGge?eNJ};OUs~O?v(1Cbesp|s+rPK)hQlmL#s<#r3a>DMcu~V)Uo_E+PQL~mG9Bq z&%>gjdDL9Fk4t!JNH)*RxA4pFR96G9ATr2V*G%OgcH@@2lT#^;@jJ6oD$GFK_G=s0 z7R6Dj441GaOb&kjMP_5%HGcN5jf<#$#WgMtC{3?4Z-9&T`{N8iw@%&KCvGR2eR!lj>>sN;O9pJ*Hd+wioDhx+p=?eINf)(_fHcW1=sf#I?9_(Ioxf%V?Y&a|84W_k1;i6A~XDySBxY1zJ z6MS%zTJdmlVu0YAm#vjcU*nI&S<*^d|(bu77mhn{y3M{kpQeb>5YQ(we4|%JLmAJz4X%p!#HDfQ2Z-QMI^X2|>|g`5L7; z{txh%#F}npq8CW-+SrUhyq$ho*34#)S1Kh5GwnzV?UFj{($*~LHS@c4+!S(z&0GuX zj7`&Ly~Bsbl!mZYS=TfH z_cFPibeNxdpIm(qIoaZL<_;$5NA+f$pTR)Q9ISOW0RIlG4#pyzt0a-_nz zm%$l@f=oCVV#xZxvjTJSWbN8bP_oiAdE>4Nz z*28m&m0?I0B}yjE_;9rAP{CkA!NrP&(EGwP zOEI%Q(WO$2P78BgmF3eOO`xi#O7u7xC4i8%*N(y;JDq6j{It9tWg}_gSQ|Fub|J+g zD!k4S;tx|W8usXr#>Is6-O;iR8jAy?-cmE;=8Vy$t1@EaYsj~9hzPhLP208M*xAOM z_tIy&8yJ|dwxWZ9H}bw zTx_t87wkQ~!1m&b{hlhy0@YA9xCpy_Jl?4VRJ4nmRN0=V9B<~5Gp;}yC~TjvJU@Tw zY;V~xr^;7(;lfhdT1v!f6?|+wuP6!P@Hk#|EA~n2>2=G72436R;t~JiikT)1W1NyT zZfxUv$2>z}&GA`x7?*{3w=UBFI`KAHjGO7^dbkl!lYHaQ3y2raqI}bxl^akWQPIRV zj0{{r0^uBKhpCnCl|Kn+LOlG1??vGZR}E9&2{=tFZ4hlvX!>mfc!E^ALW5VlM<7D7 zR>$UB0U;J;p|aI>2^8vx4&SuVe4Ball0L9V-N3N-SAfcUh?itq_ABtW809 z!Z1P{djdRh?0I*=7m@Gl#6Pz5tpF00MwVTcJivlU?8t#N5cGqfPl^2?pcDJSvkRS? zdS5^OsUgBeCcfgk`4|KZ?Q-M5atQiCD1*d)5a5aZ*v$tO*i!aMs)MV>UzQ*ggd0i) O{@Td^U=YLufPVp^ql4uD diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/_metadata/generated_indexed_rulesets/_ruleset1 b/app/src/main/assets/extensions/my_extension/orion_drama/_metadata/generated_indexed_rulesets/_ruleset1 new file mode 100644 index 0000000000000000000000000000000000000000..81463deb2fe5ce5dbc6606437542472fb20f5472 GIT binary patch literal 659 zcmbu7J#NB45QWFWK@=8oK|zsX3#v#&NRd#Qlt|PFMQJUdNMVRTNYMEJ9Dp)M@DV6E z21lSs9rHc^lr-^L-_GpXZ^nM>e!m@nW;fMz!-c;|FZ0XD9xbUBjkEVd;<0CfSyrJ)t2@L?X`yff_9MozrRDP z?>R#CJxPsv-)K)Y^eNf^r>awtSMpZgy@5Q_IqX0l_Q1h?kNsQ|;=HsP#d#NXRKMES xJ;&u+Q)%9}=%Q8ek2tcXXNjWT$%BTbawvTUMb&+T`8tZD`F6RF;+NSfwi|FMJgEQx literal 0 HcmV?d00001 diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/background.js b/app/src/main/assets/extensions/my_extension/orion_drama/background.js index 93e41eca..203072a0 100644 --- a/app/src/main/assets/extensions/my_extension/orion_drama/background.js +++ b/app/src/main/assets/extensions/my_extension/orion_drama/background.js @@ -1,16 +1,2 @@ -chrome.webRequest.onBeforeRequest.addListener( - function(details) { - if (details.type === "main_frame") { - const currentUrl = details.originUrl || details.documentUrl || ""; - - // 현재 URL에 'darama'가 포함되어 있는데, 이동할 URL에는 'darama'가 없다면 차단 - if (currentUrl.includes("darama") && !details.url.includes("darama")) { - console.log("Redirect blocked for URL:", details.url); - return { cancel: true }; - } - } - return {}; - }, - { urls: [""] }, - ["blocking"] // 요청을 가로채고 취소할 수 있는 권한 -); \ No newline at end of file +// Manifest V3에서는 네트워크 차단을 rules.json이 담당하므로 이 파일은 비워둡니다. +console.log("Darama AdBlocker 서비스 워커가 실행되었습니다."); \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/dramadunyam.js b/app/src/main/assets/extensions/my_extension/orion_drama/dramadunyam.js new file mode 100644 index 00000000..e1669439 --- /dev/null +++ b/app/src/main/assets/extensions/my_extension/orion_drama/dramadunyam.js @@ -0,0 +1,110 @@ +// ==UserScript== +// @name Darama Safe Blocker +// @namespace http://tampermonkey.net/ +// @version 1.7 +// @description 사파리 @allFrames 적용 및 투명 iframe/새 탭 링크 원천 제거 +// @match *://*/* +// @run-at document-start +// @inject-into page +// @allFrames true +// @grant none +// ==/UserScript== + +(function() { + 'use strict'; + + // 1. 페이지가 그려지기도 전에 CSS로 투명 오버레이 iframe과 외부 새 탭 링크의 터치 판정을 완전히 제거 + const style = document.createElement('style'); + style.textContent = ` + /* 처음에 발견된 전체화면 투명 오버레이 iframe 무력화 */ + iframe[style*="2147483647"], + iframe[style*="position: fixed"], + iframe[style*="position:fixed"], + iframe[src="about:blank"], + iframe:not([src]), + /* 외부 도메인으로 새 탭을 여는 투명 링크들의 터치 판정 제거 */ + a[target="_blank"]:not([href*="dramadunyam.com"]) { + display: none !important; + pointer-events: none !important; + width: 0 !important; + height: 0 !important; + opacity: 0 !important; + z-index: -999999 !important; + } + `; + (document.head || document.documentElement).appendChild(style); + + // 2. window.open 및 동적 a 태그 생성 원천 봉쇄 + window.open = function() { return null; }; + + const origCreateElement = document.createElement; + document.createElement = function(tagName) { + const el = origCreateElement.apply(this, arguments); + if (String(tagName).toLowerCase() === 'a') { + // 광고 스크립트가 메모리 상에서 몰래 태그를 만들어 클릭시키는 수법 차단 + Object.defineProperty(el, 'target', { + get: () => '_self', + set: () => {} + }); + } + return el; + }; + + // 3. 손가락이 화면에 닿는 순간(touchstart, pointerdown) 모든 a 태그의 새 탭 속성 강제 삭제 + const neutralizeLink = (e) => { + // Shadow DOM 내부의 링크까지 추적 + const path = e.composedPath ? e.composedPath() : [e.target]; + for (const node of path) { + if (node && node.tagName === 'A') { + const href = node.href || ''; + if (node.target === '_blank' || (href.startsWith('http') && !href.includes('dramadunyam.com'))) { + node.removeAttribute('target'); + node.removeAttribute('href'); + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + return false; + } + } + } + }; + + ['touchstart', 'pointerdown', 'mousedown', 'touchend', 'mouseup', 'click'].forEach(evt => { + window.addEventListener(evt, neutralizeLink, { capture: true, passive: false }); + }); + + // 4. 동적으로 삽입되는 투명 iframe 실시간 제거 (일반 div나 플레이어는 건드리지 않음) + const killAdIframes = () => { + // 모든 외부 _blank 링크 무력화 + document.querySelectorAll('a[target="_blank"]').forEach(a => { + if (!a.href || !a.href.includes('dramadunyam.com')) { + a.removeAttribute('target'); + a.removeAttribute('href'); + a.style.setProperty('pointer-events', 'none', 'important'); + } + }); + + // 투명 덮개 iframe만 정밀 삭제 + document.querySelectorAll('iframe').forEach(iframe => { + const s = iframe.getAttribute('style') || ''; + const src = iframe.getAttribute('src') || ''; + const comp = window.getComputedStyle(iframe); + + // 화면에 고정(fixed)되어 있거나 z-index가 비정상적으로 높은 투명 iframe 타격 + if ( + s.includes('2147483647') || + s.includes('fixed') || + comp.position === 'fixed' || + parseInt(comp.zIndex) > 9999 || + !src || + src === 'about:blank' + ) { + iframe.remove(); + } + }); + }; + + const observer = new MutationObserver(killAdIframes); + observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true }); + setInterval(killAdIframes, 150); +})(); \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/f_ori/background.js b/app/src/main/assets/extensions/my_extension/orion_drama/f_ori/background.js new file mode 100644 index 00000000..bf0c3b30 --- /dev/null +++ b/app/src/main/assets/extensions/my_extension/orion_drama/f_ori/background.js @@ -0,0 +1,16 @@ +chrome.webRequest.onBeforeRequest.addListener( + function(details) { + if (details.type === "main_frame") { + const currentUrl = details.originUrl || details.documentUrl || ""; + + // 현재 URL에 'dramadunyam'이 포함되어 있는데, 이동할 URL에는 'dramadunyam'이 없다면 외부 사이트로 간주하고 차단 + if (currentUrl.includes("dramadunyam") && !details.url.includes("dramadunyam")) { + console.log("외부 팝업/리다이렉트 차단됨:", details.url); + return { cancel: true }; + } + } + return {}; + }, + { urls: [""] }, + ["blocking"] +); \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/f_ori/f_ori_drama.zip b/app/src/main/assets/extensions/my_extension/orion_drama/f_ori/f_ori_drama.zip new file mode 100644 index 0000000000000000000000000000000000000000..c4243ecb65bde5a4aa2ea7194872891d65555a2d GIT binary patch literal 3252 zcmc&$doQLSnig#$98WhKR#pq+wih*%Y%~YX&LzODIKz+#*(K zk`j|bl$o*7jfxsH-Fl_NrFrpL4!%z3cnyd)Bkw=UMOj;4pj;I3Nh#200`wLKxtI%<=#L_yYir+KU1L8iBK9EwI+!FdP=M4Gp7z zaC|YRgoGjIkJk(IT!Pr5k8{e8=TD3?F9nzq-JR^eu^%a*@&zkRGgX8SKt$5xTNsmz z;=hNs3qBzvRXEmE5DdOLJ(h_#7$S7I#wUuE9D9^)pUd)qSJjyo8y(#VG@L8CXmunB zM?I(NH5LJnxrLze(p%!6dF#ZqDQ*78ZmD+5U}Ydnxz{KKulD8a+h;LR_?^rX#Ms{y z?#8B-AiJ+`MV1g4sH2ssV&cQI5EPR&R3xCD)*@wY&Y^OXnlGYH@3C6)9F)J~wl|2S zI>#wn-cuDbHIV$I!LSo)urgIEuP`{Hx5Oglge-lQ8fr@HcwT>-z9?$@+$4M{caCa1 zzb)u_oq;0h<`%-PSHihPL#DZzjAp)<7l;yvMh!2n&SbaKomCG&T^cdlH)s9P5*%M# zvAmZ{l#WiZp+B%rn@I63;hpNv{1i9{Cl^CPW6s7Y*TgzNujFsObH?jwxn@_uBdXYf zmzC(nQBTGq^Xh^r$}JLmvrA?9foZ1m^{x(C0P7IvMi1Fypj?c zhqUYvLA*D&dq9IpW4n9$F}u_lR{iQ~otl^~%u|ewm-}(zLiXbL5v*~8Ajnlf@Qvlw zD-NK~ioyDe`}B8Q>hBTYbHXbm6!d6d!1r7#0}}mrVN+Yl54B*XQ;R}Z?1WVs46^Z- z40@{Xo)fzRT~)F(Ifo}&7hW}|kFcd+Ki`^eQe|cVo~KB0 z7sfp4#3v&@2|#9)=pJeBc&qAK3AJpt@qXHSfwJ82v897YdKB;6;VXL_!VoE(9Ud|| z$Z*^|DxSZMkm2_+yAj{Hx3;eBAE$e`FiZr0y~ z{^h>?KZGtz*f@?vK$H4=g@kyJd;&;6m_`+Tv*bgd*7{&k9QW)M6%7haqior)$GoDXNZw$I5XW{)cy9IZwmA;aZ_fs(-V9~^#yTt zRg*jchuCKynb}4wUHdrt4U&8!UJVZ_uMesA&)xvQR@pgj^bjnJi}V9 z*O+GZ4D|Z2k2Z!x324D?BbBR9#J%d*zuJg_9Lh81pEx`LBtR8?5@BmGO{OR$aoWrBr%g z?IiM*p#_H({grO>Vi@MW@&!)F6Xb&@T-449wQ$p73`y3B-hFH7lah{5R~?{Tb|Kab zQKhn+=L{aE2A>{){`M}dRP$Y0jmzcID>e8=j--RSj3^X50(Z$}H`7pg=b zbDMl=%l#fLe8|Di;rGUqZw(SHRD+Ju=cG8QE4PeWNk>q0E?2lrrChFi|FlsU*X71zwzZA#-iuq2Om-?FC6MhXqOkW{By^$idIOwXc4nlCg4_QYteU zZg4UxVWgkNmDrXQgcuI(cvq}$K6KJJB>Y?S&gqqs5e-~^s{3KcisIV%7gN0vKMnza zN}=`R|L-GIdgGq|)oJ>_oc=t#aK69d==%5~3dn%_?O&%PcJ2LnPT>c5)5znp@;gT9tb*014>giFB$_VaxULat?$^@P_Te@yr}-v+|}HTs%8)*DA; zLpv^jcKWG9K)!4Hc0J!U#PxioHz4+H+Q|23%ltp!{LnS2q2QGOJD39c8vy"], + "js": ["messaging.js"] + } + ], + "permissions": [ + "webRequest", + "webRequestBlocking", + "" + ] +} \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/f_ori/messaging.js b/app/src/main/assets/extensions/my_extension/orion_drama/f_ori/messaging.js new file mode 100644 index 00000000..66991f63 --- /dev/null +++ b/app/src/main/assets/extensions/my_extension/orion_drama/f_ori/messaging.js @@ -0,0 +1,83 @@ +// 1. 투명 링크(a 태그)를 통한 새 탭 열기 완벽 차단 +document.addEventListener('click', function(event) { + const aTag = event.target.closest('a'); + + if (aTag) { + const href = aTag.href || ""; + const currentDomain = location.hostname.replace("www.", ""); + + if (aTag.target === '_blank' && href && !href.includes(currentDomain) && !href.startsWith("/")) { + event.preventDefault(); + event.stopPropagation(); + console.log("투명 a 태그 외부 광고 클릭 차단됨:", href); + } + } +}, true); + + +// 2. 자바스크립트(window.open)를 통한 팝업/새 탭 열기 강제 무력화 +const script = document.createElement('script'); +script.textContent = ` + window.open = function() { + console.log("window.open을 통한 새 탭/팝업 열기 차단됨"); + return null; + }; +`; +(document.head || document.documentElement).appendChild(script); +script.remove(); + + +// 3. 투명 오버레이 덮개 광고 강제 삭제 +function removeInvisibleOverlays() { + const elements = document.querySelectorAll('iframe, div, a'); + elements.forEach(el => { + const style = window.getComputedStyle(el); + if ( + style.zIndex >= 999 && + (style.position === 'fixed' || style.position === 'absolute') && + (style.width === '100%' || parseInt(style.width) >= window.innerWidth * 0.9) + ) { + console.log("화면 덮개형 광고 요소 강제 삭제됨:", el); + el.remove(); + } + }); +} + + +// 4. 공통 광고 요소 및 오버레이 제거 실행 함수 +function handleCommon(parentElement) { + if (!parentElement.querySelectorAll) return; + removeInvisibleOverlays(); +} + + +// 5. 페이지 로드 시 초기 정리 작업 실행 +document.addEventListener('DOMContentLoaded', function () { + handleCommon(document); +}); + + +// 6. DOM 변화를 감시하여 동적으로 추가되는 아이프레임 광고 차단 +const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((node) => { + if (node.nodeType !== Node.ELEMENT_NODE) return; + + // dramadunyam 도메인에서 동적으로 삽입되는 iframe 즉시 삭제 + if (location.href.includes("dramadunyam")) { + if (node.tagName === 'IFRAME') { + node.remove(); + } else if (node.querySelectorAll) { + node.querySelectorAll('iframe').forEach(iframe => iframe.remove()); + } + } + + handleCommon(node); + }); + }); +}); + +observer.observe(document.documentElement, { + childList: true, + subtree: true +}); \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/content.js b/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/content.js new file mode 100644 index 00000000..a89354ee --- /dev/null +++ b/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/content.js @@ -0,0 +1,35 @@ +// 1. 투명 오버레이 덮개 광고 및 불필요한 iframe 제거 +function cleanUpAds() { + // 화면 전체를 덮는 투명 막(div, a, iframe) 제거 + const elements = document.querySelectorAll('iframe, div, a'); + elements.forEach(el => { + const style = window.getComputedStyle(el); + if ( + parseInt(style.zIndex) >= 999 && + (style.position === 'fixed' || style.position === 'absolute') && + (style.width === '100%' || parseInt(style.width) >= window.innerWidth * 0.9) + ) { + el.remove(); + } + }); + + // 동적으로 삽입되는 광고용 iframe 제거 + document.querySelectorAll('iframe').forEach(iframe => { + const src = iframe.getAttribute('src') || ''; + // 본문 영상 플레이어가 아닌 빈 iframe이나 광고성 iframe 삭제 + if (!src || src === 'about:blank' || parseInt(window.getComputedStyle(iframe).zIndex) > 100) { + iframe.remove(); + } + }); +} + +// 초기 실행 +cleanUpAds(); + +// 2. 화면 조작(클릭 등) 시 동적으로 추가되는 광고 실시간 감시 및 삭제 +if (document.body) { + const observer = new MutationObserver(() => { + cleanUpAds(); + }); + observer.observe(document.body, { childList: true, subtree: true }); +} \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/inject.js b/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/inject.js new file mode 100644 index 00000000..c5c3a617 --- /dev/null +++ b/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/inject.js @@ -0,0 +1,17 @@ +// 1. 자바스크립트 window.open 무력화 +window.open = function() { + return null; +}; + +// 2. 외부로 이동하는 새 탭(_blank) 링크 클릭 가로채기 +window.addEventListener('click', function(event) { + const aTag = event.target.closest ? event.target.closest('a') : null; + if (aTag) { + const href = aTag.href || ""; + const currentDomain = location.hostname.replace("www.", ""); + if (aTag.target === '_blank' && href && !href.includes(currentDomain) && !href.startsWith("/")) { + event.preventDefault(); + event.stopPropagation(); + } + } +}, true); \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/manifest.json b/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/manifest.json new file mode 100644 index 00000000..84b5d6ae --- /dev/null +++ b/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/manifest.json @@ -0,0 +1,33 @@ +{ + "manifest_version": 3, + "name": "Darama support", + "version": "1.2", + "description": "dramadunyam.com 전용 투명 아이프레임 및 새 탭 광고 차단기", + "action": { + "default_popup": "popup.html" + }, + "permissions": [ + "activeTab", + "scripting", + "storage" + ], + "content_scripts": [ + { + "matches": [ + "*://dramadunyam.com/*", + "*://*.dramadunyam.com/*" + ], + "js": ["inject.js"], + "run_at": "document_start", + "world": "MAIN" + }, + { + "matches": [ + "*://dramadunyam.com/*", + "*://*.dramadunyam.com/*" + ], + "js": ["content.js"], + "run_at": "document_end" + } + ] +} \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/ori_drama_ext_3.zip b/app/src/main/assets/extensions/my_extension/orion_drama/fox_ori_darama/ori_drama_ext_3.zip new file mode 100644 index 0000000000000000000000000000000000000000..5614272a907c8c9e01bddd137ebd85323befd5c1 GIT binary patch literal 3702 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 YaT)zr9R{2j=+A$cRY01n5cIcy17GJ + + + + + + +
✓ Darama 차단기 작동 중
+

dramadunyam.com의 새 탭 및 오버레이 광고를 방어합니다.

+ + \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/manifest.json b/app/src/main/assets/extensions/my_extension/orion_drama/manifest.json index e0877c9e..5a87a50e 100644 --- a/app/src/main/assets/extensions/my_extension/orion_drama/manifest.json +++ b/app/src/main/assets/extensions/my_extension/orion_drama/manifest.json @@ -1,9 +1,9 @@ { - "manifest_version": 2, + "manifest_version": 3, "version": "1.0", "name": "Darama AdBlocker", "background": { - "scripts": ["background.js"] + "service_worker": "background.js" }, "content_scripts": [ { @@ -13,9 +13,18 @@ } ], "permissions": [ - "cookies", - "", - "webRequest", - "webRequestBlocking" - ] + "declarativeNetRequest" + ], + "host_permissions": [ + "" + ], + "declarative_net_request": { + "rule_resources": [ + { + "id": "block_redirects", + "enabled": true, + "path": "rules.json" + } + ] + } } \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/messaging.js b/app/src/main/assets/extensions/my_extension/orion_drama/messaging.js index d88c2021..66991f63 100644 --- a/app/src/main/assets/extensions/my_extension/orion_drama/messaging.js +++ b/app/src/main/assets/extensions/my_extension/orion_drama/messaging.js @@ -1,17 +1,70 @@ -// 1. 페이지 로드 시 정적 광고 및 불필요한 요소 즉시 제거 +// 1. 투명 링크(a 태그)를 통한 새 탭 열기 완벽 차단 +document.addEventListener('click', function(event) { + const aTag = event.target.closest('a'); + + if (aTag) { + const href = aTag.href || ""; + const currentDomain = location.hostname.replace("www.", ""); + + if (aTag.target === '_blank' && href && !href.includes(currentDomain) && !href.startsWith("/")) { + event.preventDefault(); + event.stopPropagation(); + console.log("투명 a 태그 외부 광고 클릭 차단됨:", href); + } + } +}, true); + + +// 2. 자바스크립트(window.open)를 통한 팝업/새 탭 열기 강제 무력화 +const script = document.createElement('script'); +script.textContent = ` + window.open = function() { + console.log("window.open을 통한 새 탭/팝업 열기 차단됨"); + return null; + }; +`; +(document.head || document.documentElement).appendChild(script); +script.remove(); + + +// 3. 투명 오버레이 덮개 광고 강제 삭제 +function removeInvisibleOverlays() { + const elements = document.querySelectorAll('iframe, div, a'); + elements.forEach(el => { + const style = window.getComputedStyle(el); + if ( + style.zIndex >= 999 && + (style.position === 'fixed' || style.position === 'absolute') && + (style.width === '100%' || parseInt(style.width) >= window.innerWidth * 0.9) + ) { + console.log("화면 덮개형 광고 요소 강제 삭제됨:", el); + el.remove(); + } + }); +} + + +// 4. 공통 광고 요소 및 오버레이 제거 실행 함수 +function handleCommon(parentElement) { + if (!parentElement.querySelectorAll) return; + removeInvisibleOverlays(); +} + + +// 5. 페이지 로드 시 초기 정리 작업 실행 document.addEventListener('DOMContentLoaded', function () { handleCommon(document); -// applyDomainRules(); }); -// 2. DOM 변화를 실시간 감시하여 동적 아이프레임 및 광고 추가 완벽 차단 + +// 6. DOM 변화를 감시하여 동적으로 추가되는 아이프레임 광고 차단 const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { mutation.addedNodes.forEach((node) => { if (node.nodeType !== Node.ELEMENT_NODE) return; - // [darama 도메인] 동적으로 삽입되는 iframe 즉시 삭제 - if (location.href.includes("darama")) { + // dramadunyam 도메인에서 동적으로 삽입되는 iframe 즉시 삭제 + if (location.href.includes("dramadunyam")) { if (node.tagName === 'IFRAME') { node.remove(); } else if (node.querySelectorAll) { @@ -19,7 +72,6 @@ const observer = new MutationObserver((mutations) => { } } - // 동적으로 삽입되는 공통 광고 노드 지속 삭제 handleCommon(node); }); }); @@ -28,51 +80,4 @@ const observer = new MutationObserver((mutations) => { observer.observe(document.documentElement, { childList: true, subtree: true -}); - -// 3. 공통 광고 요소 제거 함수 (정적/동적 DOM 모두 대응) -function handleCommon(parentElement) { - if (!parentElement.querySelectorAll) return; - -// const adSelectors = [ -// ".top_google_ad_space", ".adv-group", "[id^='div-gpt-ad']", -// "[id^='div_adnmore_area']", "[class^='adv-groupno']", ".code-block", -// ".ad-template", "#xpromo-bottom-sheet", "[data-banner^='coupang-']", -// "[id^='mobonDivBanner']", "[id^='pnlTopAd']", "[class^='ad-tag']", -// "[class^='science-banner-area']" -// ]; -// -// adSelectors.forEach(selector => { -// parentElement.querySelectorAll(selector).forEach(e => e.remove()); -// }); - -// parentElement.querySelectorAll('iframe').forEach(e => { -// const src = e.getAttribute("src"); -// if (src && (src.includes("ads") || src.includes("coupang"))) { -// e.remove(); -// } -// }); -} - -// 4. 도메인별 맞춤형 요소 제거 (기존 룰 단순화) -function applyDomainRules() { - const url = location.href; - - if (url.includes("nate.com")) { - document.querySelectorAll('[class^="float-adv-wrap"], [id^="ad_"], #ad_sponsorBar, #newsSidebar, iframe[id^="ad"]').forEach(e => e.remove()); - } else if (url.includes("zdnet.co.kr")) { - document.querySelectorAll('div[id*="FloatCon"]').forEach(e => e.remove()); - } else if (url.includes("inews24")) { - document.querySelectorAll('ad[alt^="a"], div[class^="topnews"], form[class^="talkplus"], ins, footer').forEach(e => e.remove()); - } else if (url.includes("starnewskorea")) { - document.querySelectorAll('div[class^="floating-top-ad"], div[id^="dablewidget_"], footer').forEach(e => e.remove()); - } else if (url.includes("khan.co.kr")) { - document.querySelectorAll('[class^="banner-"], [class^="google-auto-placed"], footer, iframe').forEach(e => e.remove()); - } else if (url.includes("dcinside.com")) { - document.querySelectorAll('[id^="view_btn_area"], [class^="trend-rank"], [class^="adv-group"], [id^="div_adnmore_area"]').forEach(e => e.remove()); - } else if (url.includes("fmkorea.com")) { - document.querySelectorAll('[class^="fmad_wrapper"], [class^="ad ad_wrapper"], [class^="m_top_hotdeal"]').forEach(e => e.remove()); - } else if (url.includes("theqoo.net")) { - document.querySelectorAll('[class^="board_content_google_ad"], ins[class^="adsbygoogle"]').forEach(e => e.remove()); - } -} \ No newline at end of file +}); \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/orion_drama.zip b/app/src/main/assets/extensions/my_extension/orion_drama/orion_drama.zip new file mode 100644 index 0000000000000000000000000000000000000000..3585197a62c649acc18b0916ed38abc22efe306c GIT binary patch literal 3696 zcmc(ic{J4h9>-^x85%=qWb4V0HL_(3Wy?C2F+}DHGtw}2V^ByT1`m&vq9|KrH)48P zC`-sCm)kHZZ9}CrnQVE4`W=uPd%uUk9pM*_E{m zuq_j~T?nGUKlj}eJE{gFn!EHpx4w?q&NdG?dAnqQKR#S0=VnZSwHLHceX{ko;-?55 zm(q#DQrN}P0cc%Y4@=FKy+e{j?9oUsOd~Z1cuK#cw=?iYa)lvuosht;Y(a=#=F^vd zyJ_y-_fD)lm2f%v^}5}(@NsS~(heq=(||l&|6wkqHWu-x)ACo;k&&`-;J9@R#fJqQ z2_Q#*cjgp;`hAJe(`GJR+M@TCj%W6f51eG~Oob4R_*v&uC^_Br>#1{l5C_^#h*b`{ zO^W^TcjEWmc@pDPZVFk+&RC$H4MDtRn!eAX9k1=}N~yttezT4f;M+VHyz;8-hQc6Q zdZ4wuz)F3<2{|l25-9xkncXRqu<9-)wbDxC5P~0~?u@)ig!so=<$*nX7!jG@6jZJMU#)DR<_iBZ$m#ao~2#&35^evsCn5mEC>aj3rXBzlCp$l8jov3+R=NeP}_#1X>`lx^nS z{M@)|nTiC*bGP*OO(nd3`W_#c0?Eh_tPpm6PuQ8_ogs>~n1bbfl>aRM;c3#FnYQHz z=FXkhubb>PnH!j!!K#)#hJQ40VLp?kwjEj;by58FHnDguNm4g{Zqv~rv$%SZmqP~l zMI>ipZq0f#rwtaLlo9u#AXJX1ho;naSHMSGM#K@7lyvbkOsunh^g^WOZ~YC`*a=-F zh0%a{G_0c>S7{}7sW;>Jt)SyXIK@81anvZII zPtNRUa`QMxUY*ez%EXV<5GEkxE-cN?zWShueq_F?LACTjB`n>iQGMLBo4V-CmaC*@ z-c#t`>#g0iY?K~00dGFBM3qv#SuN9GvrVnF-c&mRg`jMI)1nX{XlB|`2Dg@e%qdxCfj%eOQ3EfiIfQOu^Wfj`8 zq}3YAESr?$WL);AG--Qv=ra#py!s|h8G1#S)MC%TDPSS%W3<$xE4gjqO>E_7X0|h9 zNq@9CKb#QtTboDv6bkYqQ!nVAkGA#I?t3Cm6Tbb@E+{(>rLHngz3feBe3CAak6YZ^ zl^b3j_BIXT0;^@I~-p`|cY; zYTwD!L+ICSZSTzTGn(FmO7wyhvWhzUqqpSr2(+`#2f9n2VcqRYH^<$IcUsgW)r^H% zCr%|9EYF>vUQB!GWU;kH!J=5+scV2_UKNgfXtn~Xkb9K8;B#dY%w%C53JsAvmUP?P z=UqWKU0|Tb&uzD$9u1D=$B0jgyh9$^W?%0upTEsP&2Gu2x#vcb5cX5O@O{qpVCpIZ ze}`ZB@oa4SbXMzQf~`u#!L~(-8I`pgE5T7=%BJYbU3FkLn5T56Qr=EIxH2|#ez`aq zB}yO$mt{nVFUFhXo*g62O>F7*dCy@Re@IA<7F%b|ER8aqFNW%ih3l7yH%_w>|3Q5$ z=6&mANF6ktd4gZHSCOK}!mi5{2vsRn%RDgpXinjH*WG72ItTB*u$3tqI-0B=`rN-= z|LYYhxseurcANe`w?CK<$^R#x^O7taBn6<*f3Av?+~*IF6$%1#NgadUsK*PK5*zep z0llB2;crND36+=Egf~c61E1v|gBc*n&fv-G|+y7ae%LTl|u+eZN zKj^=J8DN+TWxR&DlHWHx3G^n9;U9y?H`KYE%-iFL4e2O>0)~Ht27n?L3wZr<6?y$i dZctuTiyohb4iH%>t6&6Yt{e& literal 0 HcmV?d00001 diff --git a/app/src/main/assets/extensions/my_extension/orion_drama/rules.json b/app/src/main/assets/extensions/my_extension/orion_drama/rules.json new file mode 100644 index 00000000..8161bb4f --- /dev/null +++ b/app/src/main/assets/extensions/my_extension/orion_drama/rules.json @@ -0,0 +1,15 @@ +[ + { + "id": 1, + "priority": 1, + "action": { + "type": "block" + }, + "condition": { + "urlFilter": "*", + "excludedUrlFilter": "*dramadunyam*", + "initiatorDomains": ["dramadunyam.com"], + "resourceTypes": ["main_frame"] + } + } +] \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/reader.html b/app/src/main/assets/extensions/my_extension/reader.html index 3c12ab91..803356ef 100644 --- a/app/src/main/assets/extensions/my_extension/reader.html +++ b/app/src/main/assets/extensions/my_extension/reader.html @@ -3,10 +3,16 @@ + + + + + + + - 웹 텍스트 리더기 (나만의 서재) + 내 서재