Greasy Fork

Greasy Fork is available in English.

粤语屋去视频内嵌广告

去除粤语屋视频里嵌入的广告

目前为 2024-06-01 提交的版本,查看 最新版本

// ==UserScript==
// @name         粤语屋去视频内嵌广告
// @name:zh-CN   粤语屋去视频内嵌广告
// @name:zh-TW   粵語屋去視頻內嵌廣告
// @name:zh-HK   粵語屋去視頻內嵌廣告
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      1.0.0
// @description  去除粤语屋视频里嵌入的广告
// @description:zh-CN 去除粤语屋及其在中国大陆、香港和台湾地区相关视频网站里嵌入的广告
// @description:zh-TW 去除粵語屋及其在中國大陸、香渌和台灣地區相關視頻網站裡嵌入的廣告
// @description:zh-HK 去除粵語屋及其在中國大陸、香港和台灣地區相關視頻網站裡嵌入的廣告
// @author       hua
// @grant        unsafeWindow
// @license      MIT
// @include      https://m3u8.yueyuwu.cc/player/*
// @run-at       document-start
// ==/UserScript==

(function () {
    unsafeWindow.XMLHttpRequest = class extends unsafeWindow.XMLHttpRequest {
        get xhrResponseValue() {
            const xhr = this;
            if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
                const url = xhr.responseURL;
                if (url.endsWith('mixed.m3u8')) {
                    return process_m3u8(super.response);
                }
            }
            return super.response;
        }
        get responseText() {
            return this.xhrResponseValue;
        }
        get response() {
            return this.xhrResponseValue;
        }
    };

    function process_m3u8(file) {
        // console.log(file);
        let lines = file.split('\n');
        let ts_name_pre;
        let processed_lines = [];
        for (let line of lines) {
            if (line.endsWith('.ts')) {
                ts_name_pre = line.slice(0, 10);
                break;
            }
        }
        for (let line of lines) {
            if (line.endsWith('.ts') && !line.startsWith(ts_name_pre)) {
                processed_lines.pop();
                if (processed_lines[processed_lines.length - 1] == '#EXT-X-DISCONTINUITY') {
                    processed_lines.pop();
                }
                console.log(`删除${line}`);
                continue;
            }
            processed_lines.push(line);
        }

        let processed_file = processed_lines.join('\n');
        // console.log(processed_file);
        return processed_file;
    }
})();