// ==UserScript== // @name 一之题库搜索 // @namespace http://tampermonkey.net/ // @version 0.6 // @description 搜索一之题库的答案,支持划词搜索、拖拽和自定义token(加密显示) // @match *://*/* // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue // @connect q.icodef.com // @author 有问题联系q: 2430486030 // ==/UserScript== (function() { 'use strict'; // 创建搜索框和结果显示区域 const container = document.createElement('div'); container.style.cssText = ` position: fixed; top: 10px; right: 10px; z-index: 9999; background-color: #f0f0f0; border-radius: 5px; padding: 10px; box-shadow: 0 0 10px rgba(0,0,0,0.1); font-family: Arial, sans-serif; cursor: move; `; const searchBox = document.createElement('input'); searchBox.type = 'text'; searchBox.placeholder = '输入问题搜索答案'; searchBox.style.cssText = ` width: 200px; padding: 5px; border: 1px solid #ccc; border-radius: 3px; font-size: 14px; cursor: text; margin-bottom: 5px; `; const tokenInput = document.createElement('input'); tokenInput.type = 'password'; tokenInput.placeholder = '输入你的token'; tokenInput.style.cssText = ` width: 170px; padding: 5px; border: 1px solid #ccc; border-radius: 3px 0 0 3px; font-size: 14px; cursor: text; margin-bottom: 5px; `; const toggleTokenVisibility = document.createElement('button'); toggleTokenVisibility.textContent = '👁️'; toggleTokenVisibility.style.cssText = ` width: 30px; padding: 5px; border: 1px solid #ccc; border-left: none; border-radius: 0 3px 3px 0; font-size: 14px; cursor: pointer; background-color: #f0f0f0; `; const tokenInputWrapper = document.createElement('div'); tokenInputWrapper.style.cssText = ` display: flex; margin-bottom: 5px; `; tokenInputWrapper.appendChild(tokenInput); tokenInputWrapper.appendChild(toggleTokenVisibility); const saveTokenButton = document.createElement('button'); saveTokenButton.textContent = '保存Token'; saveTokenButton.style.cssText = ` padding: 5px; margin-left: 5px; cursor: pointer; `; const resultDiv = document.createElement('div'); resultDiv.style.cssText = ` margin-top: 10px; max-width: 300px; max-height: 200px; overflow-y: auto; background-color: white; padding: 10px; border-radius: 3px; font-size: 14px; line-height: 1.4; cursor: default; `; container.appendChild(tokenInputWrapper); container.appendChild(saveTokenButton); container.appendChild(searchBox); container.appendChild(resultDiv); document.body.appendChild(container); // 读取保存的token let token = GM_getValue('oneTokenValue', ''); tokenInput.value = token; // 切换token可见性 toggleTokenVisibility.addEventListener('click', function() { if (tokenInput.type === 'password') { tokenInput.type = 'text'; toggleTokenVisibility.textContent = '🔒'; } else { tokenInput.type = 'password'; toggleTokenVisibility.textContent = '👁️'; } }); // 保存token saveTokenButton.addEventListener('click', function() { token = tokenInput.value.trim(); GM_setValue('oneTokenValue', token); alert('Token已保存'); }); // 添加拖拽功能 let isDragging = false; let dragOffsetX, dragOffsetY; container.addEventListener('mousedown', function(e) { if (e.target === container) { isDragging = true; dragOffsetX = e.clientX - container.offsetLeft; dragOffsetY = e.clientY - container.offsetTop; } }); document.addEventListener('mousemove', function(e) { if (isDragging) { container.style.left = (e.clientX - dragOffsetX) + 'px'; container.style.top = (e.clientY - dragOffsetY) + 'px'; container.style.right = 'auto'; } }); document.addEventListener('mouseup', function() { isDragging = false; }); // 添加事件监听器 searchBox.addEventListener('keypress', function(e) { if (e.key === 'Enter') { searchAnswer(this.value); } }); // 添加划词搜索功能 let selectionTimeout; document.addEventListener('selectionchange', function() { clearTimeout(selectionTimeout); selectionTimeout = setTimeout(() => { const selectedText = window.getSelection().toString().trim(); if (selectedText) { searchBox.value = selectedText; searchAnswer(selectedText); } }, 2000); // 2秒延迟 }); // 搜索答案的函数 function searchAnswer(question) { if (!token) { resultDiv.textContent = '请先设置你的Token'; return; } const simple = "true"; const split = "%23"; const url = `https://q.icodef.com/api/v1/q/${encodeURIComponent(question)}?simple=${simple}&token=${token}&split=${split}`; resultDiv.textContent = '搜索中...'; GM_xmlhttpRequest({ method: "GET", url: url, onload: function(response) { console.log(response); if (response.status === 200) { const result = JSON.parse(response.response); if (result.data) { resultDiv.textContent = `搜索结果:${result.data}`; } else { resultDiv.textContent = '未找到相关答案'; } } else { const result = JSON.parse(response.response); resultDiv.textContent = result.msg || '搜索失败,请稍后再试'; } }, onerror: function(error) { console.error('搜索出错:', error); resultDiv.textContent = '搜索出错,请检查网络连接'; } }); } })();