Greasy Fork is available in English.

虎牙免登陆清晰度

虎牙免登陆可控清晰度【自动切最高清晰度】【自 2023-07 huya 更新后,全网首发 huya 绕过登录可切换画质清晰度】

< 虎牙免登陆清晰度についてのフィードバック

レート:良 – スクリプトは良好に動作する

§
投稿日: 2024/04/21
編集日: 2024/04/21

我自己改了个版本,特点是

  • 使用 MutationObserver 监听登录弹窗
  • 加了 @noframes 避免在 iframe 里执行
// ==UserScript==
// @name         虎牙免登陆清晰度
// @namespace    https://github.com/demon-zhonglin/tmJavaScript
// @version      0.9
// @description  虎牙免登陆可控清晰度【自动切最高清晰度】【自 2023-07 huya 更新后,全网首发 huya 绕过登录可切换画质清晰度】
// @author       demon-zhonglin
// @include      https://*.huya.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @run-at       document-start
// @noframes
// ==/UserScript==

(function () {
    'use strict';

    function untilTrue(fn, maxRetry = 1000) {
      let retry = 0;

      const interval = setInterval(() => {
        if (fn() || ++retry >= maxRetry) {
          clearInterval(interval);
        }
      }, 500);
    }

    function hideLoginDialog(node) {
      if (node.nodeType === Node.ELEMENT_NODE) {
        const element = /** @type {Element} */ (node);
        if (element.matches('#UDBSdkLgn') && element.style.display === 'block') {
          element.style.display = 'none';
        }
      }
    }

    new MutationObserver(mrs => {
      mrs.forEach(mr => {
        if (mr.type === 'childList') {
          mr.addedNodes.forEach(hideLoginDialog)
        }
        else {
          hideLoginDialog(mr.target)
        }
      })
    }).observe(document, {
      childList: true,
      subtree: true,
      attributes: true
    })

    // 更新画质项 节点属性
    function changeVideotypeItem() {
      $('.player-videotype-list li').each(function (e, t) {
        let obj = $(t).data('data');
        obj.status = 1;
        $(t).data('data', obj);
      });

      const videotypeList = $('.player-menu-panel ul.player-videotype-list > li');
      if (videotypeList.length > 0) {
        setTimeout(() => {
          try {
            videotypeList[0].click();
          } catch {
            window.alert('自动切换画质失败,请手动切换视频画质!');
          }
        }, 1000);
        return true;
      }
    }

    // 清空倒计时
    function clearCountdown() {
      const timeNum = window.localStorage.getItem('roomHeartbeat');
      if (Number.isInteger(timeNum)) {
        window.localStorage.setItem('roomHeartbeat', -Infinity); // 跳过未登录时间检测
      }
    }

    const main = () => {
      // 避免多开浏览器tab有某个tab失效导致重新触发登录时间
      clearCountdown();

      // 覆盖关闭窗口事件
      untilTrue(() => {
        if (window.HyLogin) {
          window.HyLogin.prototype.closeUdbLogin = function () {
            window.HyLogin.notice("loginClose");
          };
          return true;
        }
      });

      // 监听视频状态
      untilTrue(() => {
        if (window.VPlayer?.prototype?.videoStatus === 0 && changeVideotypeItem()) {
          return true;
        }
      });
    };

    main();
  })();
§
投稿日: 2024/05/15

#UDBSdkLgn 替换成 #HUYA-UDBSdkLgn 可以适配虎牙最近的更新。

§
投稿日: 2024/05/15

请问可以屏蔽登录弹窗吗,三分钟就会弹一个

§
投稿日: 2024/05/16

登录弹窗一直卡着无法关闭,删除了清空倒计时才能关闭登录弹窗,

我自己改了个版本,特点是

  • 使用 MutationObserver 监听登录弹窗
  • 加了 @noframes 避免在 iframe 里执行
// ==UserScript==
// @name         虎牙免登陆清晰度
// @namespace    https://github.com/demon-zhonglin/tmJavaScript
// @version      0.9
// @description  虎牙免登陆可控清晰度【自动切最高清晰度】【自 2023-07 huya 更新后,全网首发 huya 绕过登录可切换画质清晰度】
// @author       demon-zhonglin
// @include      https://*.huya.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @run-at       document-start
// @noframes
// ==/UserScript==

(function () {
    'use strict';

    function untilTrue(fn, maxRetry = 1000) {
      let retry = 0;

      const interval = setInterval(() => {
        if (fn() || ++retry >= maxRetry) {
          clearInterval(interval);
        }
      }, 500);
    }

    function hideLoginDialog(node) {
      if (node.nodeType === Node.ELEMENT_NODE) {
        const element = /** @type {Element} */ (node);
        if (element.matches('#UDBSdkLgn') && element.style.display === 'block') {
          element.style.display = 'none';
        }
      }
    }

    new MutationObserver(mrs => {
      mrs.forEach(mr => {
        if (mr.type === 'childList') {
          mr.addedNodes.forEach(hideLoginDialog)
        }
        else {
          hideLoginDialog(mr.target)
        }
      })
    }).observe(document, {
      childList: true,
      subtree: true,
      attributes: true
    })

    // 更新画质项 节点属性
    function changeVideotypeItem() {
      $('.player-videotype-list li').each(function (e, t) {
        let obj = $(t).data('data');
        obj.status = 1;
        $(t).data('data', obj);
      });

      const videotypeList = $('.player-menu-panel ul.player-videotype-list > li');
      if (videotypeList.length > 0) {
        setTimeout(() => {
          try {
            videotypeList[0].click();
          } catch {
            window.alert('自动切换画质失败,请手动切换视频画质!');
          }
        }, 1000);
        return true;
      }
    }

    // 清空倒计时
    function clearCountdown() {
      const timeNum = window.localStorage.getItem('roomHeartbeat');
      if (Number.isInteger(timeNum)) {
        window.localStorage.setItem('roomHeartbeat', -Infinity); // 跳过未登录时间检测
      }
    }

    const main = () => {
      // 避免多开浏览器tab有某个tab失效导致重新触发登录时间
      clearCountdown();

      // 覆盖关闭窗口事件
      untilTrue(() => {
        if (window.HyLogin) {
          window.HyLogin.prototype.closeUdbLogin = function () {
            window.HyLogin.notice("loginClose");
          };
          return true;
        }
      });

      // 监听视频状态
      untilTrue(() => {
        if (window.VPlayer?.prototype?.videoStatus === 0 && changeVideotypeItem()) {
          return true;
        }
      });
    };

    main();
  })();

真好用 感谢大佬!!

返信を投稿

返信を投稿するにはログインしてください。