您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a floating button that gets the magnet link when pressed and blocks pop-up windows
// ==UserScript== // @name CracksHash Magnet Getter with Popup Blocker // @namespace http://tampermonkey.net/ // @version 1.7 // @description Adds a floating button that gets the magnet link when pressed and blocks pop-up windows // @author ThatDudeJBob // @match *://crackshash.com/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // Configuration const buttonConfig = { text: localStorage.getItem('buttonText') || 'Click Magnet', backgroundColor: localStorage.getItem('buttonBgColor') || '#007bff', textColor: 'white', initialTop: localStorage.getItem('buttonTop') || '10px', initialRight: localStorage.getItem('buttonRight') || '10px' }; // Helper function to create and style elements function createElement(type, styles, textContent = '') { const element = document.createElement(type); Object.assign(element.style, styles); element.textContent = textContent; return element; } // Function to show overlay warning function showOverlayWarning(message, type) { const overlay = createElement('div', { position: 'fixed', top: '10px', left: '50%', transform: 'translateX(-50%)', backgroundColor: type === 'error' ? 'rgba(245, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0.5)', color: 'white', padding: '10px', borderRadius: '5px', zIndex: '1000', transition: 'opacity 1s', opacity: '1' }, message); document.body.appendChild(overlay); setTimeout(() => { overlay.style.opacity = '0'; setTimeout(() => document.body.removeChild(overlay), 1000); }, 2000); } // Function to toggle settings menu visibility function toggleSettingsMenu() { settingsMenu.style.display = settingsMenu.style.display === 'none' ? 'block' : 'none'; } // Save settings function saveSettings() { localStorage.setItem('buttonText', buttonTextInput.value); localStorage.setItem('buttonBgColor', buttonBgColorInput.value); localStorage.setItem('buttonTop', buttonTopInput.value + 'px'); localStorage.setItem('buttonRight', buttonRightInput.value + 'px'); button.innerText = buttonTextInput.value; button.style.backgroundColor = buttonBgColorInput.value; button.style.top = buttonTopInput.value + 'px'; button.style.right = buttonRightInput.value + 'px'; settingsMenu.style.display = 'none'; } // Block pop-up windows, except for settings menu interactions function preventPopup(e) { if (e.target.tagName === 'A' && (e.target.href.startsWith('magnet:') || new URL(e.target.href).hostname === window.location.hostname)) { return; } if (settingsMenu.contains(e.target) || e.target === settingsButton) { return; } e.preventDefault(); } // Create the floating button const button = createElement('button', { position: 'fixed', top: buttonConfig.initialTop, right: buttonConfig.initialRight, zIndex: '1000', backgroundColor: buttonConfig.backgroundColor, color: buttonConfig.textColor, border: 'none', padding: '10px', borderRadius: '5px', cursor: 'pointer', width: 'auto', whiteSpace: 'nowrap' }, buttonConfig.text); document.body.appendChild(button); // Create the settings button const settingsButton = createElement('button', { position: 'fixed', top: '10px', right: '50px', // Adjusted to avoid overlap zIndex: '1000', backgroundColor: '#555', color: 'white', border: 'none', padding: '10px', borderRadius: '5px', cursor: 'pointer', width: 'auto', whiteSpace: 'nowrap' }, '?'); document.body.appendChild(settingsButton); // Create the settings menu const settingsMenu = createElement('div', { position: 'fixed', top: '40px', right: '10px', zIndex: '1000', backgroundColor: '#333', color: 'white', padding: '10px', borderRadius: '5px', display: 'none' }); document.body.appendChild(settingsMenu); const buttonTextInput = createElement('input', { display: 'block', marginBottom: '10px' }); buttonTextInput.type = 'text'; buttonTextInput.placeholder = 'Button Text'; buttonTextInput.value = buttonConfig.text; settingsMenu.appendChild(buttonTextInput); const buttonBgColorInput = createElement('input', { display: 'block', marginBottom: '10px' }); buttonBgColorInput.type = 'color'; buttonBgColorInput.value = buttonConfig.backgroundColor; settingsMenu.appendChild(buttonBgColorInput); const buttonTopInput = createElement('input', { display: 'block', marginBottom: '10px' }); buttonTopInput.type = 'number'; buttonTopInput.placeholder = 'Top Position (px)'; buttonTopInput.value = parseInt(buttonConfig.initialTop, 10); settingsMenu.appendChild(buttonTopInput); const buttonRightInput = createElement('input', { display: 'block', marginBottom: '10px' }); buttonRightInput.type = 'number'; buttonRightInput.placeholder = 'Right Position (px)'; buttonRightInput.value = parseInt(buttonConfig.initialRight, 10); settingsMenu.appendChild(buttonRightInput); const saveButton = createElement('button', { marginTop: '10px', backgroundColor: '#007bff', color: 'white', border: 'none', padding: '5px', borderRadius: '5px', cursor: 'pointer' }, 'Save'); settingsMenu.appendChild(saveButton); settingsButton.addEventListener('click', toggleSettingsMenu); saveButton.addEventListener('click', saveSettings); document.addEventListener('click', (event) => { if (!settingsMenu.contains(event.target) && event.target !== settingsButton) { settingsMenu.style.display = 'none'; } }); // Add click event to the button button.addEventListener('click', () => { const magnetLink = document.querySelector('a[href^="magnet:"]'); if (magnetLink) { const originalBeforeUnload = window.onbeforeunload; // Backup the original onbeforeunload handler window.onbeforeunload = null; // Allow navigation for this action magnetLink.click(); window.onbeforeunload = originalBeforeUnload; // Restore the original handler } else { showOverlayWarning('No magnet link found on this page.', 'error'); } }); // Override window.open to detect blocked pop-ups const originalWindowOpen = window.open; window.open = function(url, name, specs) { const newWindow = originalWindowOpen(url, name, specs); if (!newWindow || newWindow.closed || typeof newWindow.closed === 'undefined') { showOverlayWarning('Blocked a pop-up window.', 'error'); } return newWindow; }; window.addEventListener('beforeunload', preventPopup); window.addEventListener('unload', preventPopup); document.addEventListener('click', preventPopup); })();