아카라이브(arca.live) 목록 맨 위에 끼어드는 광고 행을 숨기거나, 숨기는 대신 그 광고가 어느 채널의 어떤 글인지를 목록에 채워 넣습니다.
Chromium(Chrome/Edge/Whale) 확장, Firefox 확장(.xpi), Tampermonkey 유저스크립트가
src/core.js 하나를 그대로 공유합니다. 권한은 하나도 요구하지 않습니다.
광고 버튼 — 클릭하거나 Alt+A 를 누르면 두 모드가 번갈아 바뀝니다.
| 아이콘 | 모드 | 동작 |
|---|---|---|
눈 감김 bi-eye-slash-fill |
hide (기본) |
광고 행을 목록에서 감춤 |
눈 뜸 bi-eye-fill |
label |
광고 행을 남기고 채널 이름과 글 정보를 표시 |
이미지 미리보기 버튼 — 마우스를 올렸을 때 이미지를 띄울지 정합니다.
두 선택 모두 localStorage 에 저장되어 다음 방문에도 유지됩니다.
.nav-control 이 없는 화면에서는 단축키만 동작합니다.
-
채널 배지 — 먼저
arknights같은/b/*의*부분이 즉시 뜨고, 대상을 받아오면 사람이 읽는 채널 이름(명일방주)으로 바뀝니다. 클릭하면 그 채널을 새 탭으로 열고, 마우스를 올리면 광고 원본 링크 전체가 툴팁으로 보입니다. 외부 사이트 광고면 도메인의 대표 이름을 보여줍니다.광고 링크 배지 https://www.youtube.com/watch?v=…youtubehttps://theuselessweb.com/theuselesswebhttps://news.bbc.co.uk/…bbc -
작성자 / 작성일 / 조회수 / 추천 — 추천 칸은
76/1처럼 추천수/비추천수가 나오고, 마우스를 올리면추천 76 / 비추천 1 / 댓글 20이 툴팁으로 나옵니다. -
이미지 미리보기 — 마우스를 올리고 0.2초 뒤 커서 옆에 대표 이미지를 가로 128px 로 띄웁니다. 글에 이미지가 없으면 아무것도 띄우지 않습니다.
실제 arca.live HTML 에서 광고 행과 일반 공지는 클래스가 같습니다
(둘 다 <a class="vrow column notice notice-service">). 그래서 "첫 번째 행"이 아니라
아래 표식으로 구분합니다.
.vcol.col-ad셀이 있음 (광고 배지)<b id="textad">텍스트 광고 본문이 있음.vcol.col-id의 내용이 정확히광고
일반 공지(<b>공지</b>, notice-board)와 앱 안내 공지는 건드리지 않습니다.
광고 행의 HTML 에는 번호와 제목뿐이라 채널 이름/작성자/조회수/추천/이미지가
존재하지 않습니다. 그래서 label 모드일 때 광고가 가리키는 주소를 same-origin fetch
로 받아 옵니다.
| 광고 링크 | 받아오는 곳 | 얻는 것 |
|---|---|---|
/b/슬러그/글번호 (댓글 링크 /댓글번호#c_… 포함) |
글 본문 | 전부 |
/b/슬러그 (채널 자체·검색 결과 등 글번호 없음) |
채널 목록 | 채널 이름만 |
| 외부 도메인 | 받지 않음 | 도메인 이름만 |
| 항목 | 출처 |
|---|---|
| 채널 이름 | .board-title a.title[data-channel-name] |
| 작성자 | .article-head .member-info .user-info |
| 추천/비추천/댓글/조회수 | .article-info 의 .head/.body 쌍 |
| 작성일 | .article-info time[datetime] |
| 이미지 | .article-content img → 없으면 og:image |
이미지가 없는 글에도 아카라이브는 og:image 로 사이트 로고(/static/apple-icon.png)를
넣기 때문에, 본문 이미지를 먼저 보고 /static/ 경로는 걸러냅니다.
채널 목록만 받아온 경우에는 채울 값이 없으므로 정보 행을 만들지 않습니다.
결과는 sessionStorage 에 5분간 캐시되고, 실패(로그인 요구, 삭제된 글, Cloudflare 검사 등)
하면 조용히 배지만 남기고 넘어갑니다. hide 모드에서는 요청을 아예 보내지 않습니다.
브라우저에서는 로그인/Cloudflare 통과 쿠키가 함께 나가므로 이 요청은 정상적으로 동작합니다(실제 Firefox/Chromium 에서 확인). 같은 주소를 스크립트로 직접 두드리면 Cloudflare 가 막지만, 그때도 목록이 깨지지 않고 배지만 남습니다.
src/core.js 맨 위 CONFIG 에서 조절합니다(수정 후 node build.mjs).
| 옵션 | 기본값 | 설명 |
|---|---|---|
treatFirstServiceNoticeAsAd |
false |
목록의 첫 번째 notice-service 행을 무조건 광고로 취급. 광고가 없는 날엔 앱 안내 공지가 대신 걸립니다 |
showToggleButton |
true |
.nav-control 에 토글 버튼 넣기 |
enableHotkey |
true |
Alt+A 로 광고 모드 전환 |
badgeShowPrefix |
false |
채널 이름을 알기 전 임시 표시하는 슬러그에 /b/ 접두사 붙이기 |
badgeShowChannelSlug |
false |
채널 이름 뒤에 슬러그를 괄호로 병기 (명일방주 (arknights)) |
fetchArticleInfo |
true |
대상 페이지를 받아 채널 이름/작성자/조회수/추천을 채움 (끄면 슬러그 배지만) |
hoverPreview |
true |
이미지 미리보기의 초기값. 이후에는 토글 버튼으로 저장한 값이 우선 |
previewAllRows |
false |
미리보기를 광고뿐 아니라 목록의 모든 글에 적용. 썸네일이 있는 글은 그대로 쓰고 없는 글만 본문을 받아오므로 요청이 늘어납니다 |
previewDelay |
200 |
마우스를 올린 뒤 미리보기까지의 시간(ms) |
userscript/arca-user-ad-upgrade.user.js 를 Tampermonkey 대시보드로 드래그하거나,
내용을 복사해 새 스크립트로 붙여넣고 저장합니다.
chrome://extensions→ 개발자 모드 켜기- 압축해제된 확장 프로그램을 로드 →
extension/폴더 선택
- FIrefox 부가 기능에 Arca User Ad Upgrade를 검색해 Firefox를 통해 설치
node build.mjs를 실행해 나오는dist/arca-user-ad-upgrade-1.0.0.xpi로 직접 설치
src/core.js # 소스
extension/manifest.json # MV3 (Chromium + Firefox 공용)
extension/content.js # 생성물
userscript/arca-user-ad-upgrade.user.js # 생성물
dist/arca-user-ad-upgrade-<버전>.xpi # 생성물 (Firefox)
build.mjs # zip(.xpi) 생성
src/core.js 를 고친 뒤:
node build.mjs설정은 arca.live origin 의 localStorage(arca-user-ad-upgrade:mode,
arca-user-ad-upgrade:preview)에 저장되므로 확장과 유저스크립트가 같은 값을 씁니다.
받아온 페이지 정보는 arca-user-ad-upgrade:meta:* 로 sessionStorage 에 캐시됩니다.