您需要先安装一个扩展,例如 篡改猴、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);
- })();