您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Injects a custom Scratch block, keeps it within the code box, and crashes the project
- // ==UserScript==
- // @name Scratch Custom Block Injector
- // @namespace http://tampermonkey.net/
- // @version 1.1
- // @description Injects a custom Scratch block, keeps it within the code box, and crashes the project
- // @author You
- // @match *://scratch.mit.edu/projects/editor/*
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- function injectBlockImage() {
- const workspace = document.querySelector(".blocklyWorkspace");
- if (!workspace) return;
- let blockImage = document.createElement("img");
- blockImage.src = "https://i.ibb.co/MD0wbSkd/Untitled502-20250203231330.png";
- blockImage.style.position = "absolute";
- blockImage.style.left = "200px";
- blockImage.style.top = "150px";
- blockImage.style.width = "120px";
- blockImage.style.height = "40px";
- blockImage.style.cursor = "grab";
- blockImage.draggable = true;
- blockImage.style.zIndex = "1000";
- let offsetX, offsetY;
- function moveBlock(e) {
- const codeBox = workspace.getBoundingClientRect();
- let newX = e.clientX - offsetX;
- let newY = e.clientY - offsetY;
- // Keep within code box boundaries
- if (newX < codeBox.left) newX = codeBox.left;
- if (newX + blockImage.clientWidth > codeBox.right) newX = codeBox.right - blockImage.clientWidth;
- if (newY < codeBox.top) newY = codeBox.top;
- if (newY + blockImage.clientHeight > codeBox.bottom) newY = codeBox.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);
- });
- });
- workspace.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);
- })();