您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Injects a custom Scratch block, keeps it within the exact code box, and crashes the project
- // ==UserScript==
- // @name Scratch Custom Block Injector
- // @namespace http://tampermonkey.net/
- // @version 1.2
- // @description Injects a custom Scratch block, keeps it within the exact code box, and crashes the project
- // @author You
- // @match *://scratch.mit.edu/projects/editor/*
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- function injectBlockImage() {
- const codeBox = document.querySelector(".blocklyMainBackground");
- if (!codeBox) return;
- let blockImage = document.createElement("img");
- blockImage.src = "https://i.ibb.co/MD0wbSkd/Untitled502-20250203231330.png";
- blockImage.style.position = "absolute";
- blockImage.style.width = "120px";
- blockImage.style.height = "40px";
- blockImage.style.cursor = "grab";
- blockImage.style.zIndex = "1000";
- const codeBoxRect = codeBox.getBoundingClientRect();
- blockImage.style.left = `${codeBoxRect.left + 50}px`;
- blockImage.style.top = `${codeBoxRect.top + 50}px`;
- let offsetX, offsetY;
- function moveBlock(e) {
- let newX = e.clientX - offsetX;
- let newY = e.clientY - offsetY;
- if (newX < codeBoxRect.left) newX = codeBoxRect.left;
- if (newX + blockImage.clientWidth > codeBoxRect.right) newX = codeBoxRect.right - blockImage.clientWidth;
- if (newY < codeBoxRect.top) newY = codeBoxRect.top;
- if (newY + blockImage.clientHeight > codeBoxRect.bottom) newY = codeBoxRect.bottom - blockImage.clientHeight;
- blockImage.style.left = `${newX}px`;
- blockImage.style.top = `${newY}px`;
- }
- blockImage.addEventListener("mousedown", (e) => {
- offsetX = e.clientX - blockImage.getBoundingClientRect().left;
- offsetY = e.clientY - blockImage.getBoundingClientRect().top;
- document.addEventListener("mousemove", moveBlock);
- document.addEventListener("mouseup", () => {
- document.removeEventListener("mousemove", moveBlock);
- });
- });
- document.body.appendChild(blockImage);
- }
- function crashAndClose() {
- const runButton = document.querySelector(".green-flag");
- if (runButton) {
- runButton.addEventListener("click", () => {
- setTimeout(() => {
- while(true) {}
- }, 500);
- setTimeout(() => {
- window.close();
- }, 1000);
- });
- }
- }
- setTimeout(() => {
- injectBlockImage();
- crashAndClose();
- }, 3000);
- })();