// ==UserScript== // @name deAMP // @name:zh-TW deAMP // @description AMP sucks, thus no AMP thanks. // @description:zh-TW 垃圾 AMP,好走不送。 // @author Jason Kwok // @namespace https://jasonhk.dev/ // @version 2.0.0 // @license MIT // @match http*://*/* // @run-at document_end // @grant none // @supportURL https://greasyfork.org/scripts/450569/feedback // @downloadURL none // ==/UserScript== const SESSION_KEY = getSessionKey(); const isAmp = (document.querySelector("html[⚡], html[amp]") !== null); const canonical = document.head.querySelector("link[rel=canonical][href]"); if (isAmp && (canonical !== null)) { const lastVisit = sessionStorage.getItem(SESSION_KEY); if (location.href !== lastVisit) { sessionStorage.setItem(SESSION_KEY, location.href); location.replace(canonical.href); } else { sessionStorage.removeItem(SESSION_KEY); } } else { console.debug("[deAMP] Not a valid AMP page."); sessionStorage.removeItem(SESSION_KEY); } function getSessionKey() { const SESSION_KEY = "sessionKey"; let key = GM_getValue(SESSION_KEY); if (!key) { key = generateUuidV4(); GM_setValue(SESSION_KEY, key); } return key; function generateUuidV4() { const uuid = new Array(36); for (let i = 0; i < 36; i++) { uuid[i] = Math.floor(Math.random() * 16); } uuid[14] = 4; uuid[19] = uuid[19] &= ~(1 << 2); uuid[19] = uuid[19] |= (1 << 3); uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-"; return uuid.map((x) => x.toString(16)).join(""); } }