根据当前网页的域名自动在 Greasy Fork 上搜索脚本,并显示可移动的按钮,支持设置语言限制和搜索引擎
目前為
// ==UserScript==
// @name 自动搜索油叉脚本
// @namespace http://tampermonkey.net/
// @version 0.5
// @description 根据当前网页的域名自动在 Greasy Fork 上搜索脚本,并显示可移动的按钮,支持设置语言限制和搜索引擎
// @author Your Name
// @license MIT
// @match *://*/*
// @icon https://www.google.com/s2/favicons?domain=greasyfork.org
// @grant GM_openInTab
// @grant GM_registerMenuCommand
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
(function() {
'use strict';
// 获取当前网页的域名
var domain = window.location.hostname;
// 获取按钮显示设置
var showButton = GM_getValue('showButton', true);
// 获取用户设置
var useLanguageRestriction = GM_getValue('useLanguageRestriction', false);
var selectedSearchEngine = GM_getValue('selectedSearchEngine', 'greasyfork');
// 创建按钮
var button = document.createElement('div');
button.style.position = 'fixed';
button.style.bottom = '10px';
button.style.right = '10px';
button.style.width = '100px';
button.style.height = '30px';
button.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
button.style.color = 'white';
button.style.textAlign = 'center';
button.style.lineHeight = '30px';
button.style.borderRadius = '5px';
button.style.cursor = 'pointer';
button.style.zIndex = '9999';
button.innerText = '搜索脚本';
button.style.display = showButton ? 'block' : 'none';
// 鼠标悬停和离开效果
button.onmouseover = function() {
button.style.backgroundColor = 'rgba(0, 0, 0, 1)';
};
button.onmouseout = function() {
button.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
};
let isDragging = false;
// 按钮点击事件
button.onclick = function() {
if (!isDragging) {
var searchURL;
if (selectedSearchEngine === 'greasyfork') {
searchURL = `https://greasyfork.org/en/scripts/by-site/${domain}${useLanguageRestriction ? '?filter_locale=0' : ''}`;
} else if (selectedSearchEngine === 'sleazyfork') {
searchURL = `https://sleazyfork.org/en/scripts/by-site/${domain}${useLanguageRestriction ? '?filter_locale=0' : ''}`;
}
GM_openInTab(searchURL, { active: true });
}
};
// 使按钮可移动
button.onmousedown = function(event) {
isDragging = false;
var shiftX = event.clientX - button.getBoundingClientRect().left;
var shiftY = event.clientY - button.getBoundingClientRect().top;
function moveAt(pageX, pageY) {
isDragging = true;
button.style.left = pageX - shiftX + 'px';
button.style.top = pageY - shiftY + 'px';
}
function onMouseMove(event) {
moveAt(event.pageX, event.pageY);
}
document.addEventListener('mousemove', onMouseMove);
button.onmouseup = function() {
document.removeEventListener('mousemove', onMouseMove);
button.onmouseup = null;
};
};
button.ondragstart = function() {
return false;
};
document.body.appendChild(button);
// 创建设置窗口
var settingsWindow = document.createElement('div');
settingsWindow.style.position = 'fixed';
settingsWindow.style.bottom = '50px';
settingsWindow.style.right = '10px';
settingsWindow.style.width = '220px';
settingsWindow.style.height = '150px';
settingsWindow.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';
settingsWindow.style.color = 'white';
settingsWindow.style.padding = '10px';
settingsWindow.style.borderRadius = '5px';
settingsWindow.style.display = 'none';
settingsWindow.style.zIndex = '10000';
// 创建关闭按钮
var closeButton = document.createElement('span');
closeButton.style.position = 'absolute';
closeButton.style.top = '5px';
closeButton.style.right = '10px';
closeButton.style.cursor = 'pointer';
closeButton.innerHTML = '✕';
closeButton.onclick = function() {
settingsWindow.style.display = 'none';
};
settingsWindow.appendChild(closeButton);
var languageCheckbox = document.createElement('input');
languageCheckbox.type = 'checkbox';
languageCheckbox.checked = useLanguageRestriction;
languageCheckbox.onchange = function() {
useLanguageRestriction = languageCheckbox.checked;
GM_setValue('useLanguageRestriction', useLanguageRestriction);
};
settingsWindow.appendChild(languageCheckbox);
var languageLabel = document.createElement('label');
languageLabel.innerText = ' 启用语言限制';
settingsWindow.appendChild(languageLabel);
settingsWindow.appendChild(document.createElement('br'));
var engineLabel = document.createElement('label');
engineLabel.innerText = '选择搜索引擎:';
settingsWindow.appendChild(engineLabel);
settingsWindow.appendChild(document.createElement('br'));
var greasyforkOption = document.createElement('input');
greasyforkOption.type = 'radio';
greasyforkOption.name = 'searchEngine';
greasyforkOption.value = 'greasyfork';
greasyforkOption.checked = selectedSearchEngine === 'greasyfork';
greasyforkOption.onchange = function() {
selectedSearchEngine = 'greasyfork';
GM_setValue('selectedSearchEngine', selectedSearchEngine);
};
settingsWindow.appendChild(greasyforkOption);
var greasyforkLabel = document.createElement('label');
greasyforkLabel.innerText = ' Greasy Fork';
settingsWindow.appendChild(greasyforkLabel);
settingsWindow.appendChild(document.createElement('br'));
var sleazyforkOption = document.createElement('input');
sleazyforkOption.type = 'radio';
sleazyforkOption.name = 'searchEngine';
sleazyforkOption.value = 'sleazyfork';
sleazyforkOption.checked = selectedSearchEngine === 'sleazyfork';
sleazyforkOption.onchange = function() {
selectedSearchEngine = 'sleazyfork';
GM_setValue('selectedSearchEngine', selectedSearchEngine);
};
settingsWindow.appendChild(sleazyforkOption);
var sleazyforkLabel = document.createElement('label');
sleazyforkLabel.innerText = ' Sleazy Fork';
settingsWindow.appendChild(sleazyforkLabel);
document.body.appendChild(settingsWindow);
// 注册菜单命令
GM_registerMenuCommand('显示/隐藏搜索按钮', function() {
showButton = !showButton;
button.style.display = showButton ? 'block' : 'none';
GM_setValue('showButton', showButton);
});
GM_registerMenuCommand('设置搜索选项', function() {
settingsWindow.style.display = settingsWindow.style.display === 'none' ? 'block' : 'none';
});
})();