您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在JIRA页面,快速拷贝ID,标题,链接
// ==UserScript== // @name Jira标题拷贝按钮 // @namespace https://izmj.net/ // @version 0.7 // @description 在JIRA页面,快速拷贝ID,标题,链接 // @author GiraKoo // @license MIT // @match *://*/browse/* // @run-at document-end // @icon64 https://gitee.com/izmj/web_js/raw/main/img/zmj.png // ==/UserScript== // 尝试获取元素,如果不存在则返回null function getElementByIdSafe(id) { return document.getElementById(id) || null; } // 尝试添加元素到指定位置,如果父元素不存在则不执行任何操作 function appendElementAfterSafe(newElement, referenceElement) { if (referenceElement) { referenceElement.after(newElement); } } // 创建拷贝按钮的ul元素和li元素 var transitions_div = getElementByIdSafe('opsbar-opsbar-transitions'); var jira_copy_link_div = document.createElement('div'); jira_copy_link_div.id = 'jira_copy_link_div'; jira_copy_link_div.className = 'aui-buttons pluggable-ops'; // 如果transitions_div下面有ul元素 if (transitions_div) { if (transitions_div.querySelector('ul')) { var jira_copy_link_ul = document.createElement('ul'); jira_copy_link_ul.className = 'toolbar-group pluggable-ops'; jira_copy_link_ul.id = 'jira_copy_link_ul'; var li_copy_id = document.createElement('li'); li_copy_id.className = 'toolbar-item'; li_copy_id.innerHTML = '<a class="aui-button toolbar-trigger" href="#" id="jira_copy_id">ID</a>'; jira_copy_link_ul.appendChild(li_copy_id); var li_copy_title = document.createElement('li'); li_copy_title.className = 'toolbar-item'; li_copy_title.innerHTML = '<a class="aui-button toolbar-trigger" href="#" id="jira_copy_title">标题</a>'; jira_copy_link_ul.appendChild(li_copy_title); var li_copy_link = document.createElement('li'); li_copy_link.className = 'toolbar-item'; li_copy_link.innerHTML = '<a class="aui-button toolbar-trigger" href="#" id="jira_copy_link">链接</a>'; jira_copy_link_ul.appendChild(li_copy_link); jira_copy_link_div.appendChild(jira_copy_link_ul); } else { // 如果transitions_div下面没有ul元素,则直接使用a元素 var jira_copy_id_element = document.createElement('a'); jira_copy_id_element.className = 'aui-button toolbar-trigger'; jira_copy_id_element.href = '#'; jira_copy_id_element.id = 'jira_copy_id'; jira_copy_id_element.innerText = 'ID'; var jira_copy_title_element = document.createElement('a'); jira_copy_title_element.className = 'aui-button toolbar-trigger'; jira_copy_title_element.href = '#'; jira_copy_title_element.id = 'jira_copy_title'; jira_copy_title_element.innerText = '标题'; var jira_copy_link_element = document.createElement('a'); jira_copy_link_element.className = 'aui-button toolbar-trigger'; jira_copy_link_element.href = '#'; jira_copy_link_element.id = 'jira_copy_link'; jira_copy_link_element.innerText = '链接'; jira_copy_link_div.appendChild(jira_copy_id_element); jira_copy_link_div.appendChild(jira_copy_title_element); jira_copy_link_div.appendChild(jira_copy_link_element); } } // 安全地添加按钮ul到transitions_div之后 appendElementAfterSafe(jira_copy_link_div, transitions_div); // 显示提示信息的函数 function showToast(message) { var toastId = 'toast_jira_quick_copy'; var div = document.createElement('div'); div.id = toastId; div.className = 'toast'; div.style.position = 'fixed'; div.style.top = '10px'; div.style.left = '50%'; div.style.transform = 'translateX(-50%)'; div.style.padding = '10px'; div.style.backgroundColor = '#4CAF50'; div.style.color = 'white'; div.style.borderRadius = '5px'; div.style.zIndex = '9999'; div.innerText = message; // 清除可能存在的旧toast var oldToast = getElementByIdSafe(toastId); if (oldToast) { oldToast.parentNode.removeChild(oldToast); } document.body.appendChild(div); // 设置定时器移除toast,并确保在移除前清除事件监听器 setTimeout(function () { var toast = getElementByIdSafe(toastId); if (toast) { toast.parentNode.removeChild(toast); } }, 1000); } // 添加事件监听器,将JIRA的ID拷贝到剪贴板 var jira_copy_id_btn = getElementByIdSafe('jira_copy_id'); if (jira_copy_id_btn) { jira_copy_id_btn.addEventListener('click', function () { var jira_id_element = getElementByIdSafe('key-val'); if (jira_id_element) { navigator.clipboard.writeText(jira_id_element.innerText); showToast('已拷贝到剪贴板'); } else { console.error('未能找到JIRA ID或标题元素'); } }); } // 添加事件监听器,将JIRA的ID和标题拷贝到剪贴板 var jira_copy_title_btn = getElementByIdSafe('jira_copy_title'); if (jira_copy_title_btn) { jira_copy_title_btn.addEventListener('click', function () { var jira_id_element = getElementByIdSafe('key-val'); var jira_title_element = getElementByIdSafe('summary-val'); if (jira_id_element && jira_title_element) { var copy_text = jira_id_element.innerText + ' ' + jira_title_element.innerText; navigator.clipboard.writeText(copy_text); showToast('已拷贝到剪贴板'); } else { console.error('未能找到JIRA ID或标题元素'); } }); } // 添加事件监听器,将JIRA链接拷贝到剪贴板 var jira_copy_link_btn = getElementByIdSafe('jira_copy_link'); if (jira_copy_link_btn) { jira_copy_link_btn.addEventListener('click', function () { // 获取key-val元素的href var jira_id_element = getElementByIdSafe('key-val'); var jira_link = jira_id_element ? jira_id_element.href : window.location.href; navigator.clipboard.writeText(jira_link); showToast('已拷贝到剪贴板'); }); }