CHZZK - 해상도 1080p 자동 선택

치지직 1080p 자동 선택

Инсталирай този скрипт?
Препоръчано от автора

Може да харесате и CHZZK - 애드블록 팝업 삭제.

Инсталирай този скрипт
  1. // ==UserScript==
  2. // @name CHZZK - 해상도 1080p 자동 선택
  3. // @icon https://play-lh.googleusercontent.com/wvo3IB5dTJHyjpIHvkdzpgbFnG3LoVsqKdQ7W3IoRm-EVzISMz9tTaIYoRdZm1phL_8
  4. // @namespace http://tampermonkey.net/
  5.  
  6. // @license MIT
  7. // @author 고기
  8. // @version 250226
  9. // @match *://*.chzzk.naver.com/*
  10. // @description 치지직 1080p 자동 선택
  11. // @grant none
  12.  
  13. // ==/UserScript==
  14.  
  15. (function () {
  16. 'use strict';
  17.  
  18. let firstRun = true;
  19.  
  20. function triggerClick(element) {
  21. if (element) {
  22. element.click();
  23.  
  24. let event = new MouseEvent('click', {
  25. bubbles: true,
  26. cancelable: true,
  27. view: window
  28. });
  29. element.dispatchEvent(event);
  30.  
  31. let enterEvent = new KeyboardEvent('keydown', {
  32. bubbles: true,
  33. cancelable: true,
  34. key: 'Enter',
  35. code: 'Enter'
  36. });
  37. element.dispatchEvent(enterEvent);
  38. }
  39. }
  40.  
  41. function selectBestAvailableQuality() {
  42. let settingButton = document.querySelector('.pzp-setting-button');
  43. if (!settingButton) return;
  44.  
  45. triggerClick(settingButton);
  46.  
  47. setTimeout(() => {
  48. let qualityButton = document.querySelector('.pzp-setting-intro-quality');
  49. if (!qualityButton) return;
  50.  
  51. triggerClick(qualityButton);
  52.  
  53. setTimeout(() => {
  54. let qualityItems = document.querySelectorAll('.pzp-ui-setting-quality-item.pzp-ui-setting-pane-item');
  55. if (qualityItems.length === 0) return;
  56.  
  57. let targetQuality = Array.from(qualityItems).find(item =>
  58. item.textContent.trim().startsWith("1080p")
  59. );
  60.  
  61. if (!targetQuality) {
  62. targetQuality = Array.from(qualityItems).find(item =>
  63. item.textContent.trim().startsWith("720p")
  64. );
  65. }
  66.  
  67. if (targetQuality) {
  68. triggerClick(targetQuality);
  69. let innerButton = targetQuality.querySelector("div") || targetQuality.querySelector("span");
  70. if (innerButton) triggerClick(innerButton);
  71. }
  72. }, 0);
  73. }, 0);
  74. }
  75.  
  76. function initAutoQualitySelection() {
  77. let delay = firstRun ? 3000 : 700; // 첫방송입장 3000ms : 다음방송입장 700ms
  78. firstRun = false;
  79.  
  80. setTimeout(() => {
  81. let settingButton = document.querySelector('.pzp-setting-button');
  82. if (settingButton) {
  83. selectBestAvailableQuality();
  84. } else {
  85. let observer = new MutationObserver((mutations, obs) => {
  86. let settingButton = document.querySelector('.pzp-setting-button');
  87. if (settingButton) {
  88. selectBestAvailableQuality();
  89. obs.disconnect();
  90. }
  91. });
  92.  
  93. observer.observe(document.body, { childList: true, subtree: true });
  94. }
  95. }, delay);
  96.  
  97. // 1초 동안 메뉴 숨기기
  98. const style = document.createElement('style');
  99. style.innerHTML = `
  100. .pzp-setting-pane,
  101. .pzp-setting-quality-pane,
  102. .pzp-settings { display: none !important; }
  103. `;
  104. document.head.appendChild(style);
  105.  
  106. setTimeout(() => {
  107. document.head.removeChild(style);
  108. }, 1000);
  109. }
  110.  
  111. function observeUrlChange(callback) {
  112. let lastUrl = location.href;
  113. new MutationObserver(() => {
  114. const currentUrl = location.href;
  115. if (currentUrl !== lastUrl) {
  116. lastUrl = currentUrl;
  117. if (currentUrl.includes('/live/')) {
  118. callback();
  119. }
  120. }
  121. }).observe(document, { childList: true, subtree: true });
  122.  
  123. window.addEventListener('popstate', () => {
  124. const currentUrl = location.href;
  125. if (currentUrl !== lastUrl) {
  126. lastUrl = currentUrl;
  127. if (currentUrl.includes('/live/')) {
  128. callback();
  129. }
  130. }
  131. });
  132. }
  133.  
  134. initAutoQualitySelection();
  135. observeUrlChange(initAutoQualitySelection);
  136. })();