// ==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 // @downloadURL none // ==/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; } })();