您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Unlock all Fireship PRO courses/lessons.
// ==UserScript== // @name Freeship // @namespace lemons // @version 1.12 // @description Unlock all Fireship PRO courses/lessons. // @author lemons // @match https://fireship.io/* // @icon https://em-content.zobj.net/source/apple/391/fire_1f525.png // @grant none // ==/UserScript== async function unlock() { document.querySelectorAll("[free=\"\"]").forEach(el => el.setAttribute("free", true)) // set all elements with the attribute free set to "" to true if (document.querySelector("if-access [slot=\"granted\"]")) { // replace HOW TO ENROLL to YOU HAVE ACCESS document.querySelector("if-access [slot=\"denied\"]").remove() document.querySelector("if-access [slot=\"granted\"]").setAttribute("slot", "denied") } if (document.querySelector("video-player")?.shadowRoot?.querySelector(".vid")?.innerHTML) return; // return if no video player const parts = atob(document.querySelector("global-data").vimeo).split("="); let decoded = ""; parts.forEach(part => { let done = ""; try { done = atob(part) } catch {} finally { decoded += done } }); let vimeoId = ""; if (decoded.includes("/")) { vimeoId = Number(decoded.split("\u0088")[0].split("/").pop()); } else { vimeoId = Number(decoded.split("\u0088")[0]) } const youtubeId = atob(document.querySelector("global-data").youtube); // get id for youtube video if (youtubeId) { // if there is an id, document.querySelector("video-player").setAttribute("free", true) // set free to true document.querySelector("video-player").shadowRoot.querySelector(".vid").innerHTML = `<iframe src="https://youtube.com/embed/${youtubeId}" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen="" title="${location.pathname.split("/")[3]}" width="426" height="240" frameborder="0"></iframe>` // set video return; } if (vimeoId) { // if there is an id, document.querySelector("video-player").setAttribute("free", true) // set free to true const html = (await fetch(`https://vimeo.com/api/oembed.json?url=https%3A%2F%2Fvimeo.com%2F${vimeoId}&id=${vimeoId}`).then(r=>r.json())).html document.querySelector("video-player").shadowRoot.querySelector(".vid").innerHTML = html // set video return; } } window.onload = unlock(); window.addEventListener("flamethrower:router:end", unlock)