您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a QR Code of the "lightsaber URL" to the front page of Lightsaber Escape
// ==UserScript== // @name Lightsaber Escape QR Code Display // @namespace DoomTay // @description Adds a QR Code of the "lightsaber URL" to the front page of Lightsaber Escape // @version 1.2.0 // @include https://lightsaber.withgoogle.com/ // @grant GM_xmlhttpRequest // ==/UserScript== var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { var lightsaberURL = ""; if(mutation.type == "characterData" && mutation.target.parentNode.id == "url") lightsaberURL = mutation.target.textContent; else if(mutation.type == "childList" && mutation.target.id == "url" && Array.prototype.some.call(mutation.addedNodes,node => node.textContent.includes("g.co"))) lightsaberURL = Array.prototype.find.call(mutation.addedNodes,node => node.textContent.includes("g.co")).textContent; if(lightsaberURL) { observer.disconnect(); //Using GM_xmlhttpRequest because this site doesn't like off-domain images GM_xmlhttpRequest({ method: "GET", url: "https://chart.googleapis.com/chart?chs=120x120&cht=qr&chl=" + lightsaberURL + "&chld=L|1&choe=UTF-8", overrideMimeType: "text/plain; charset=x-user-defined", onload: function(response) { var QRCode = new Image(); QRCode.id = "LSCode"; var arr = Uint8Array.from(response.responseText,thing => thing.charCodeAt(0) & 0xFF); var imageData = new Blob([arr.buffer],{type:"image/png"}); QRCode.src = window.URL.createObjectURL(imageData); document.getElementsByClassName("centered")[0].insertBefore(QRCode,document.getElementsByClassName("connection-url-wrapper style-scope sw-page-landing")[0]); QRCode.style.position = "absolute"; if(innerHeight >= 1024) { QRCode.style.left = "45%"; QRCode.style.bottom = "-35px"; } else { QRCode.style.left = "75%"; QRCode.style.bottom = "150px"; } } }); } }); }); var config = { attributes: true, childList: true, characterData: true, subtree: true }; observer.observe(document.getElementById("app"), config);