您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Um UserScript para o AVA SAE DIGITAL que ativa o modo professor no livro digita(depois de 5 segundos), ativa a opção de selecionar e texto e faz o player ficar 100% auto
// ==UserScript== // @name SAEskip // @namespace https://github.com/teogabrielofc/saeskip // @version 2.1 // @description Um UserScript para o AVA SAE DIGITAL que ativa o modo professor no livro digita(depois de 5 segundos), ativa a opção de selecionar e texto e faz o player ficar 100% auto // @match *://livrodigital.sae.digital/* // @match *://ava.sae.digital/_n/* // @grant none // @license GNU GPLv3 // ==/UserScript== (function() { 'use strict'; // libera o texto nas trilhas setTimeout(() => { document.onselectstart = null; document.querySelectorAll('*').forEach(element => { element.onselectstart = null; element.style.userSelect = 'auto'; element.style.webkitUserSelect = 'auto'; }); }, 5000); //botei timeout pq acho que o código é executado antes do texto ser bloqueado // função pra ativar o modo professor function ativarModoProfessor() { try { document.body.classList.add('professorActive'); } catch(e) {} document.querySelectorAll('iframe').forEach(function(frame) { try { frame.contentWindow.document.body.classList.add('professorActive'); } catch(e) {} }); } // detecta se tá no livro if (location.href.startsWith("https://livrodigital.sae.digital/livros")) { setTimeout(ativarModoProfessor, 5000); } // botei um toast pro negocio do player function showToast(message) { const toast = document.createElement('div'); toast.textContent = message; toast.style.position = 'fixed'; toast.style.bottom = '32px'; toast.style.right = '32px'; toast.style.background = 'rgba(32,32,32,0.98)'; toast.style.color = '#fff'; toast.style.fontSize = '16px'; toast.style.fontFamily = 'sans-serif'; toast.style.padding = '12px 24px'; toast.style.borderRadius = '8px'; toast.style.boxShadow = '0 2px 8px rgba(0,0,0,0.2)'; toast.style.zIndex = '9999'; toast.style.transition = 'opacity 0.5s'; toast.style.opacity = '1'; document.body.appendChild(toast); setTimeout(() => { toast.style.opacity = '0'; setTimeout(() => { toast.remove(); location.reload(); }, 600); }, 2500); } if (window.location.hostname === "ava.sae.digital") { // XMLHttpRequest interception const open = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url, ...rest) { if (method === "POST" && url.includes("apis.sae.digital/ava/answer/video")) { this.addEventListener("readystatechange", function() { if (this.readyState === 4 && this.responseURL.includes("apis.sae.digital/ava/answer/video")) { showToast("Progresso do vídeo marcado como 100% (SAEskip)"); } }); const send = this.send; this.send = function(body) { try { let data = JSON.parse(body); if (data.video_percentage !== undefined) { data.video_percentage = 100; body = JSON.stringify(data); } } catch (e) {} send.call(this, body); }; } open.call(this, method, url, ...rest); }; // fetch interception window.fetch = new Proxy(window.fetch, { apply: async function(target, thisArg, args) { let url = args[0]; let options = args[1] || {}; if (url.includes("apis.sae.digital/ava/answer/video") && options.method === "POST") { let clone = options.body; if (clone) { let bodyText = await clone.text(); let bodyJson = JSON.parse(bodyText); if (bodyJson.video_percentage !== undefined) { bodyJson.video_percentage = 100; options.body = JSON.stringify(bodyJson); showToast("Progresso do vídeo marcado como 100% (SAEskip)"); } } } return target.apply(thisArg, [url, options]); } }); } })();