您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Unlock any paid article from Medium by using Freedium, works with custom domains too
// ==UserScript== // @name [WORKING] Unlock any Medium Article // @namespace https://github.com/insign/userscripts // @version 202409271723 // @description Unlock any paid article from Medium by using Freedium, works with custom domains too // @author Hélio <[email protected]> // @match *://*/* // @grant none // @license WTFPL // ==/UserScript== (function () { 'use strict'; // Função para verificar a presença da metatag específica function isMediumArticle() { return document.querySelector('meta[data-rh="true"][property="al:ios:app_name"][content="Medium"]') !== null; } // Função para realizar o redirecionamento function redirectToFreedium() { // Obtém a URL atual var currentURL = window.location.href; // Verifica se já não está na URL do Freedium para evitar loop if (!currentURL.startsWith('https://freedium.cfd/')) { // Cria a nova URL redirecionada var freediumURL = 'https://freedium.cfd/' + currentURL; // Redireciona para a nova URL window.location.replace(freediumURL); } } // Função principal que controla o fluxo function main() { // Verifica se a página é um artigo do Medium if (isMediumArticle()) { // Obtém o referenciador (a página anterior que o usuário veio) var referrer = document.referrer; var shouldRedirect = true; if (referrer) { try { // Analisa a URL do referenciador para obter o hostname var referrerHost = (new URL(referrer)).hostname; // Verifica se o referenciador é freedium.cfd if (referrerHost === 'freedium.cfd') { shouldRedirect = false; // Não redireciona se veio do Freedium } } catch (e) { // Se não for possível analisar o referenciador, continua com o redirecionamento console.error('Erro ao analisar o referenciador:', e); } } if (shouldRedirect) { redirectToFreedium(); } } } // Executa a função principal quando o conteúdo do documento estiver carregado if (document.readyState === 'complete' || document.readyState === 'interactive') { setTimeout(main, 1); } else { document.addEventListener('DOMContentLoaded', main); } })();