Play videos without ad using some website like www.8090g.cn
// ==UserScript==
// @name play_video_without_ad
// @description Play videos without ad using some website like www.8090g.cn
// @namespace liudonghua123
// @version 0.1.0
// @include https://v.qq.com/x/*
// @license MIT
// ==/UserScript==
function process() {
console.info(`[play_video_without_ad] starting... `)
const play_url = `https://www.8090g.cn/?url=`;
// see https://grrr.tech/posts/create-dom-node-from-html-string/ for more methods and cons and pros.
const create_node = (html) => {
const placeholder = document.createElement("div");
placeholder.innerHTML = html;
return placeholder.firstElementChild;
};
// const items = document.querySelectorAll(".episode-list-rect .episode-list-rect__list .episode-list-rect__item > div");
const items = document.querySelectorAll(".episode-list div[data-vid][data-cid]");
if (!items || items.length == 0) {
console.info(`[play_video_without_ad] querySelectorAll items is empty!`);
}
// add a Play link to the right bottom of the item of play list and redirect to `https://www.8090g.cn/?url=https://v.qq.com/x/cover/${cid}/${vid}.html` in blank window
for(const item of items) {
// TODO: more params could be parsed using decodeURIComponent(document.querySelectorAll(".episode-list-rect .episode-list-rect__list .episode-list-rect__item>div")[0].getAttribute("dt-params")).split("&")
const vid = item.getAttribute("data-vid");
const cid = item.getAttribute("data-cid");
const href = `${play_url}https://v.qq.com/x/cover/${cid}/${vid}.html`;
const html = `<a href="${href}" target="_blank"><span style="position: absolute; right: -6px; bottom: -6px; cursor: pointer; font-size: 12px;">Play</span></a>`;
const node = create_node(html);
item.appendChild(node);
}
console.info(`[play_video_without_ad] finished... `)
};
// execute the code after some seconds in order to wait the page loaded.
// setTimeout(process, 10000);
// // https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState
// // Alternative to load event
document.onreadystatechange = () => {
if (document.readyState === "complete") {
// setTimeout(process, 30000);
process()
}
};
// // https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
// // Select the node that will be observed for mutations
// const targetNode = document.querySelectorAll(".episode-list-rect .episode-list-rect__list");
// // Options for the observer (which mutations to observe)
// const config = { attributes: true, childList: true, subtree: false };
// // Callback function to execute when mutations are observed
// const callback = (mutationList, observer) => {
// process();
// };
// // Create an observer instance linked to the callback function
// const observer = new MutationObserver(callback);
// // Start observing the target node for configured mutations
// observer.observe(targetNode, config);
// // Later, you can stop observing
// observer. Disconnect();