// ==UserScript== // @name 关键词叠词生成器 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 输入关键词生成组合叠词并添加复制按钮,增加“叠”字按钮触发生成器、关闭按钮和清空按钮,过滤介词、数字、量词和单位 // @author You // @match https://www.amazon.com/* // @match https://www.amazon.co.uk/* // @grant GM_addStyle // @downloadURL none // ==/UserScript== (function() { 'use strict'; // 创建样式,确保元素显示并美化 GM_addStyle(` #wordGeneratorContainer { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 9999; background-color: #f9f9f9; padding: 20px; border: 2px solid #ccc; border-radius: 15px; box-shadow: 0 8px 15px rgba(0, 0, 0, 0.2); display: none; min-height: 220px; font-family: 'Arial', sans-serif; transition: all 0.3s ease; width: auto; max-width: 500px; /* 限制生成器最大宽度 */ } #wordGeneratorContainer .inputRow { display: flex; align-items: center; justify-content: space-between; width: 100%; } #wordGeneratorContainer input, #wordGeneratorContainer button { margin: 5px; padding: 12px 18px; font-size: 16px; border-radius: 8px; border: 1px solid #ccc; outline: none; transition: border 0.3s ease; width: auto; } #wordGeneratorContainer input:focus, #wordGeneratorContainer button:hover { border-color: #0073e6; } #outputArea { white-space: pre-wrap; word-wrap: break-word; margin-top: 15px; border: 1px solid #ddd; padding: 15px; background-color: #f4f4f4; min-height: 150px; max-height: 200px; overflow-y: auto; border-radius: 8px; } #openGeneratorButton { position: fixed; bottom: 20px; right: 20px; background-color: #0073e6; color: white; padding: 15px 20px; font-size: 20px; border: none; border-radius: 50%; cursor: pointer; z-index: 9999; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); transition: transform 0.2s ease; } #openGeneratorButton:hover { transform: scale(1.1); } #closeButton { position: absolute; top: 10px; right: 10px; background-color: #ff3b3b; color: white; padding: 8px 12px; font-size: 14px; border: none; border-radius: 50%; cursor: pointer; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease; } #closeButton:hover { background-color: #d32f2f; } #clearButton { background-color: #ff9800; color: white; padding: 8px 12px; font-size: 16px; border: none; border-radius: 8px; cursor: pointer; width: auto; } #clearButton:hover { background-color: #f57c00; } `); // 创建生成器容器 const container = document.createElement('div'); container.id = 'wordGeneratorContainer'; const inputRow = document.createElement('div'); inputRow.classList.add('inputRow'); const inputBox = document.createElement('input'); inputBox.type = 'text'; inputBox.placeholder = '输入关键词'; const generateButton = document.createElement('button'); generateButton.textContent = '生成叠词'; const copyButton = document.createElement('button'); copyButton.textContent = '一键复制'; const clearButton = document.createElement('button'); clearButton.textContent = '清空'; clearButton.id = 'clearButton'; const outputArea = document.createElement('pre'); outputArea.id = 'outputArea'; const closeButton = document.createElement('button'); closeButton.textContent = '×'; closeButton.id = 'closeButton'; // 将元素添加到容器 inputRow.appendChild(inputBox); inputRow.appendChild(generateButton); inputRow.appendChild(copyButton); inputRow.appendChild(clearButton); container.appendChild(inputRow); container.appendChild(outputArea); container.appendChild(closeButton); // 将容器添加到页面中 document.body.appendChild(container); // 创建触发弹出的按钮 const openGeneratorButton = document.createElement('button'); openGeneratorButton.textContent = '叠'; openGeneratorButton.id = 'openGeneratorButton'; // 将触发按钮添加到页面 document.body.appendChild(openGeneratorButton); // 介词、数字、量词和单位的正则表达式 const excludeWords = [ 'for', 'with', 'in', 'on', 'at', 'by', 'of', 'to', 'from', 'and', 'the', 'a', 'an', 'or', 'as', 'so', 'into', 'after', 'before', 'during', 'between', 'under', 'over', 'along', 'through', 'about', 'by', 'above', 'below', 'inside', 'outside', 'via', 'with', 'without', 'near', 'next', 'around', 'during', 'beside', 'into', 'onto', 'at', 'under', 'over', '\\d+', // 数字 'inch', 'cm', 'kg', 'lbs', 'oz', 'g', 'lb', 'ft', 'mm', 'liter', 'ml', 'oz', 'ml', 'g', 'kilogram' ]; const excludeRegex = new RegExp(`\\b(${excludeWords.join('|')})\\b`, 'i'); // 过滤不参与组合的词 function filterWords(words) { return words.filter(word => !excludeRegex.test(word)); } // 生成叠词组合 function generateCombinations(input) { const words = input.trim().split(' '); const filteredWords = filterWords(words); const length = filteredWords.length; let combinations = []; if (length === 2) { // 处理 AB 形式 combinations.push(`${filteredWords[0]} ${filteredWords[0]} ${filteredWords[1]} ${filteredWords[1]}`); combinations.push(`${filteredWords[0]} ${filteredWords[1]} ${filteredWords[0]} ${filteredWords[1]}`); combinations.push(`${filteredWords[0]} ${filteredWords[0]} ${filteredWords[1]}`); combinations.push(`${filteredWords[0]} ${filteredWords[1]} ${filteredWords[1]}`); } else if (length === 3) { // 处理 ABC 形式 combinations.push(`${filteredWords[0]} ${filteredWords[1]} ${filteredWords[2]} ${filteredWords[0]} ${filteredWords[1]} ${filteredWords[2]}`); combinations.push(`${filteredWords[0]} ${filteredWords[0]} ${filteredWords[1]} ${filteredWords[1]} ${filteredWords[2]} ${filteredWords[2]}`); combinations.push(`${filteredWords[0]} ${filteredWords[0]} ${filteredWords[1]} ${filteredWords[2]}`); combinations.push(`${filteredWords[0]} ${filteredWords[1]} ${filteredWords[1]} ${filteredWords[2]}`); combinations.push(`${filteredWords[0]} ${filteredWords[1]} ${filteredWords[2]} ${filteredWords[2]}`); } else if (length === 4) { // 处理 ABCD 形式 combinations.push(`${filteredWords[0]} ${filteredWords[1]} ${filteredWords[2]} ${filteredWords[3]} ${filteredWords[0]} ${filteredWords[1]} ${filteredWords[2]} ${filteredWords[3]}`); combinations.push(`${filteredWords[0]} ${filteredWords[0]} ${filteredWords[1]} ${filteredWords[1]} ${filteredWords[2]} ${filteredWords[2]} ${filteredWords[3]} ${filteredWords[3]}`); combinations.push(`${filteredWords[0]} ${filteredWords[0]} ${filteredWords[1]} ${filteredWords[2]} ${filteredWords[3]}`); combinations.push(`${filteredWords[0]} ${filteredWords[1]} ${filteredWords[1]} ${filteredWords[2]} ${filteredWords[3]}`); combinations.push(`${filteredWords[0]} ${filteredWords[1]} ${filteredWords[2]} ${filteredWords[2]} ${filteredWords[3]}`); combinations.push(`${filteredWords[0]} ${filteredWords[1]} ${filteredWords[2]} ${filteredWords[3]} ${filteredWords[3]}`); } return combinations.join('\n'); } // 生成叠词按钮点击事件 generateButton.addEventListener('click', () => { const input = inputBox.value; if (input) { outputArea.textContent = generateCombinations(input); } else { outputArea.textContent = '请输入关键词!'; } }); // 复制按钮点击事件 copyButton.addEventListener('click', () => { const textToCopy = outputArea.textContent; if (textToCopy) { navigator.clipboard.writeText(textToCopy).then(() => { alert('已复制到剪贴板!'); }); } else { alert('没有生成叠词可复制!'); } }); // 打开生成器按钮点击事件 openGeneratorButton.addEventListener('click', () => { container.style.display = 'block'; // 显示生成器 }); // 关闭按钮点击事件 closeButton.addEventListener('click', () => { container.style.display = 'none'; // 隐藏生成器 }); // 清空输入框按钮点击事件 clearButton.addEventListener('click', () => { inputBox.value = ''; // 清空输入框内容 outputArea.textContent = ''; // 清空输出区域 }); })();