您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Bypasses kahoot nickname generator as well as the maximum name length
- // ==UserScript==
- // @name Kahoot Namerator and Name Length Bypass
- // @author slither
- // @version 2.3.0
- // @license MIT
- // @description Bypasses kahoot nickname generator as well as the maximum name length
- // @match https://kahoot.it/*
- // @grant none
- // @run-at document-start
- // @namespace https://greasyfork.org/users/964173
- // ==/UserScript==
- let nick = "";
- const nativeSend = XMLHttpRequest.prototype.send;
- XMLHttpRequest.prototype.send = function() {
- const oldCallback = this.onreadystatechange;
- this.onreadystatechange = function() {
- if (this.readyState === 4) {
- try {
- const response = JSON.parse(this.responseText);
- if (response.namerator === true)
- response.namerator = false;
- Object.defineProperty(this, "responseText",{
- writable: false,
- configurable: true,
- value: JSON.stringify(response)
- });
- } catch (e) {
- console.error(e);
- }
- }
- if (oldCallback)
- return oldCallback.apply(this, arguments);
- };
- return nativeSend.apply(this, arguments);
- };
- const nativeWebSocket = window.WebSocket;
- window.WebSocket = function() {
- const ws = new nativeWebSocket(...arguments);
- const nativeSend = ws.send;
- ws.send = function() {
- const interceptedMessage = JSON.parse(arguments[0]);
- if (interceptedMessage[0] && interceptedMessage[0].data) {
- if (JSON.parse(interceptedMessage[0].data.content).usingNamerator === false)
- interceptedMessage[0].data.content = JSON.stringify({ ...JSON.parse(interceptedMessage[0].data.content), usingNamerator: true });
- if (nick && interceptedMessage[0].data.name) {
- interceptedMessage[0].data.name = nick;
- nick = "";
- }
- }
- return nativeSend.apply(this, [JSON.stringify(interceptedMessage)]);
- };
- return ws;
- };
- const nativePushState = history.pushState;
- history.pushState = function() {
- const ret = nativePushState.apply(history, arguments);
- if (location.href.includes("kahoot.it/join")) {
- const observer = new MutationObserver(function() {
- if (document.getElementById("nickname")) {
- const input = document.createElement("input");
- const nickname = document.getElementById("nickname");
- const reactProps = Object.keys(nickname).find(v => v.includes("__reactProps"));
- input.className = nickname.className;
- input.type = "text";
- input.placeholder = "Nickname";
- nickname.replaceWith(input);
- input.nextElementSibling.addEventListener("click", function() {
- nick = input.value;
- nickname[reactProps].onChange({ target: { value: nick.slice(0, 15) } });
- });
- observer.disconnect();
- }
- });
- observer.observe(document.body, {
- childList: true,
- subtree: true
- });
- }
- return ret;
- };