치지직 1080p 고정 및 광고 팝업 삭제, 치직치지직 광고 차단 로그 제거 각 기능 별도로 실행 후 종료
// ==UserScript==
// @name 치지직 1080p 고정 + 광고 팝업 삭제 +치직치지직 광고 차단 로그 제거
// @namespace http://tampermonkey.net/
// @version 1.0.4
// @description 치지직 1080p 고정 및 광고 팝업 삭제, 치직치지직 광고 차단 로그 제거 각 기능 별도로 실행 후 종료
// @match *://chzzk.naver.com/*
// @grant none
// @license MIT
// ==/UserScript==
(function () {
'use strict';
let previousChannelId = null;
let scriptRunning = false;
// URL 변화를 감지하는 함수
const detectChannelChange = () => {
const currentUrl = window.location.href;
const channelIdMatch = currentUrl.match(/live\/([a-f0-9]{32})/);
const currentChannelId = channelIdMatch ? channelIdMatch[1] : null;
if (currentChannelId && currentChannelId !== previousChannelId) {
previousChannelId = currentChannelId;
if (!scriptRunning) {
executeScripts();
}
}
};
// 주기적으로 URL 변경 확인 (5000ms마다 확인)
setInterval(detectChannelChange, 5000);
// 각 기능을 수행하는 스크립트 실행 함수
function executeScripts() {
scriptRunning = true;
// 랜덤 지연 시간 생성 함수 (500ms ~ 1500ms 사이 랜덤)
function getRandomDelay() {
return Math.floor(Math.random() * 1000) + 500;
}
// 중복 실행 방지를 위한 플래그
let qualitySet = false;
let adRemoved = false;
// 모든 작업이 완료되었는지 확인하고 스크립트를 종료하는 함수
function checkAndTerminate() {
if (qualitySet && adRemoved) {
scriptRunning = false;
previousChannelId = null; // 이전 채널 ID 초기화하여 재실행 방지
return true;
}
return false;
}
// 품질 설정을 1080p로 고정하는 코드
const qualityInterval = setInterval(() => {
if (qualitySet) {
clearInterval(qualityInterval); // 플래그가 true이면 인터벌 종료
return;
}
const qualityElement = document.querySelector(
`.pzp-pc-setting-quality-pane__list-container > li:first-child:not(.pzp-pc-ui-setting-item--checked)`
);
if (qualityElement) {
setTimeout(() => {
qualityElement.click();
qualitySet = true; // 작업 완료 플래그 설정
clearInterval(qualityInterval);
if (checkAndTerminate()) {
return;
}
}, getRandomDelay());
}
}, 500);
// 광고 팝업 제거 코드
const adInterval = setInterval(() => {
if (adRemoved) {
clearInterval(adInterval); // 플래그가 true이면 인터벌 종료
return;
}
const adbb = document.querySelector(`[class^="ad_block_title"]`);
if (adbb) {
setTimeout(() => {
const closeButton = document.querySelector(`[class^=popup_cell] > button`);
if (closeButton) {
closeButton.click();
adRemoved = true; // 작업 완료 플래그 설정
clearInterval(adInterval); // 광고 팝업을 찾으면 인터벌을 종료하여 한 번만 실행
if (checkAndTerminate()) {
return;
}
}
}, getRandomDelay());
}
}, 500);
// 광고 API 요청을 차단하는 코드 (에러 로그 방지)
const originalFetch = window.fetch;
window.fetch = function() {
const url = arguments[0];
if (typeof url === 'string' && url.includes('/ad-polling/')) {
return new Promise((resolve, reject) => {
resolve({ ok: false, status: 403 });
});
}
return originalFetch.apply(this, arguments);
};
// XMLHttpRequest 차단 (에러 로그 방지)
const originalOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(method, url) {
if (url.includes('/ad-polling/')) {
this.abort();
return;
}
return originalOpen.apply(this, arguments);
};
}
// 처음 페이지 로드 시 스크립트 실행
if (!scriptRunning) {
executeScripts();
}
})();