diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c89b11c..618d4708 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -140,6 +140,21 @@ + + + + + "]}, // 모든 URL에 대해 요청 듣기 - [] + {urls: [""]}, + ["blocking"] // 요청을 차단할 수 있는 권한 부여 ); \ No newline at end of file diff --git a/app/src/main/assets/extensions/my_extension/dffd.html b/app/src/main/assets/extensions/my_extension/dffd.html index 6e429e04..0026f5da 100644 --- a/app/src/main/assets/extensions/my_extension/dffd.html +++ b/app/src/main/assets/extensions/my_extension/dffd.html @@ -1,2590 +1,228 @@ - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - NH멤버스 팟 - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Title + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +

소스 당겨 받기 간략 설명

+

XCODE 빌드 앤 런

+

Android Studio 빌드 앤 런

+

Android Apk 생성

+

Scenario Maker

+

gitea issue

+ + +

firebase 권한초 간단 설명

+ +

V.Name : 걍 버전 네임

+

V.Code : 버전 코드 스토어 업로드 시 마다 올라갈 예정

+

debug/dev_sever => 디버깅 여부 / 적용서버 {(y/D) => 디버깅 상태/ 개발서버 , (n/P) 디버깅 안됨/ 운영서버}

+

upload date time => 년월일_시분 (20240523_1123)

+

download apk link => 누르면 다운로드

+ + + + + + + + + + + + + + + + + + + + + + + +
Ver. NameVer. Codedebug/dev_sever upload _ date _ time download _ apk _ link
개발테스트
2.5.4download
상용테스트
2.5.4download
상용배포용
2.5.4download
---------------
상용랜덤테스트
2.5.4download
---------------
+ + + + + + + + + + + + + + + +

구분

설치 링크

다운 링크

IOS 탈옥 미 체크 IPAINSTALL LINK

앱 설치하기

IPA 다운로드

IOS 탈옥 체크 IPAINSTALL LINK

앱 설치하기

IPA 다운로드

+ + +

OPEN TEST

+ + +

OPEN TEST 2

+ + +

WEB Load @ TEST

+ +

WEB Load @ TEST to git

diff --git a/app/src/main/assets/extensions/my_extension/messaging.js b/app/src/main/assets/extensions/my_extension/messaging.js index 23f6ca1d..4356deb3 100644 --- a/app/src/main/assets/extensions/my_extension/messaging.js +++ b/app/src/main/assets/extensions/my_extension/messaging.js @@ -1,4 +1,29 @@ +if (location.href.includes("darama")) { + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((node) => { + // 추가된 노드 자체가 iframe인 경우 + if (node.tagName === 'IFRAME') { + node.remove(); + console.log("Blocked dynamic iframe"); + } + // 노드 내부에 자식 요소로 iframe이 포함되어 추가된 경우 + else if (node.nodeType === Node.ELEMENT_NODE && node.querySelectorAll) { + node.querySelectorAll('iframe').forEach(iframe => { + iframe.remove(); + console.log("Blocked nested dynamic iframe"); + }); + } + }); + }); + }); + // 문서 전체의 자식 노드 추가를 실시간으로 감시 + observer.observe(document.documentElement, { + childList: true, + subtree: true + }); +} function pubDateNumber(tdateTime) { diff --git a/app/src/main/assets/extensions/my_extension/orion_drama.zip b/app/src/main/assets/extensions/my_extension/orion_drama.zip new file mode 100644 index 00000000..9878b9eb Binary files /dev/null and b/app/src/main/assets/extensions/my_extension/orion_drama.zip differ 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 new file mode 100644 index 00000000..93e41eca --- /dev/null +++ b/app/src/main/assets/extensions/my_extension/orion_drama/background.js @@ -0,0 +1,16 @@ +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 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 new file mode 100644 index 00000000..e0877c9e --- /dev/null +++ b/app/src/main/assets/extensions/my_extension/orion_drama/manifest.json @@ -0,0 +1,21 @@ +{ + "manifest_version": 2, + "version": "1.0", + "name": "Darama AdBlocker", + "background": { + "scripts": ["background.js"] + }, + "content_scripts": [ + { + "run_at": "document_start", + "matches": [""], + "js": ["messaging.js"] + } + ], + "permissions": [ + "cookies", + "", + "webRequest", + "webRequestBlocking" + ] +} \ 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 new file mode 100644 index 00000000..d88c2021 --- /dev/null +++ b/app/src/main/assets/extensions/my_extension/orion_drama/messaging.js @@ -0,0 +1,78 @@ +// 1. 페이지 로드 시 정적 광고 및 불필요한 요소 즉시 제거 +document.addEventListener('DOMContentLoaded', function () { + handleCommon(document); +// applyDomainRules(); +}); + +// 2. 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")) { + 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 +}); + +// 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 diff --git a/app/src/main/assets/extensions/my_extension/reader.html b/app/src/main/assets/extensions/my_extension/reader.html index 3d3ef1a0..3c12ab91 100644 --- a/app/src/main/assets/extensions/my_extension/reader.html +++ b/app/src/main/assets/extensions/my_extension/reader.html @@ -185,7 +185,7 @@ text-align: left; border-top: 1px solid var(--border-color); border-bottom: 1px solid var(--border-color); - /* 💡 Grid 대신 Flex Column으로 변경하여 세로 스크롤에 최적화 */ + /* Grid 대신 Flex Column으로 변경하여 세로 스크롤에 최적화 */ display: flex; flex-direction: column; gap: 12px; @@ -203,7 +203,7 @@ justify-content: space-between; box-sizing: border-box; width: 100%; - flex-shrink: 0; /* 💡 핵심: 화면이 좁아도 세로로 절대 찌그러지지 않게 강제 방어 */ + flex-shrink: 0; /* 핵심: 화면이 좁아도 세로로 절대 찌그러지지 않게 강제 방어 */ overflow: hidden; transition: transform 0.15s, background 0.15s; } @@ -253,10 +253,10 @@