您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
通过QQ邮箱复制通讯录好友列表
// ==UserScript== // @name QQ邮箱复制通讯录好友列表 // @namespace https://www.zhxlp.com // @version 0.1 // @description 通过QQ邮箱复制通讯录好友列表 // @author Zhxlp // @match https://mail.qq.com/cgi-bin/laddr_list* // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js // @grant GM_log // @grant GM_setClipboard // ==/UserScript== /* global jQuery */ // 复制按钮1 const copyUserListBtn1 = () => { if(jQuery('#out #bar .nav_list .tool').length <= 0) return false; let copyBtn = document.querySelector("#copy-user-list1"); if(!copyBtn){ jQuery('#out #bar .nav_list .tool').append('<a id="copy-user-list1" href="javascript:;" class="btn_gray btn_space">复制列表</a>'); } } // 复制按钮2 const copyUserListBtn2 = () => { if(jQuery('#out #bar .nav_list .tool').length <= 0) return false; let copyBtn = document.querySelector("#copy-user-list2"); if(!copyBtn){ jQuery('#out #bar .nav_list .tool').append('<a id="copy-user-list2" href="javascript:;" class="btn_gray btn_space">复制列表(格式化)</a>'); } } const copyUserList = (event) => { let list = [] jQuery("#out #list ul li").each((_index, elem) => { let row = [] jQuery(elem).children('span').each((_index2, elem2) => { const col = jQuery(elem2).text(); row.push(col); }); list.push(row); }); const sList = formatList(list,event.data); GM_log(sList); GM_setClipboard(sList,'text'); window.alert('复制成功'); } const formatList = (li,fill) => { let list = li; if(fill == true){ list = formatList2(li); } let formatStr = ''; for(let i = 0; i < list.length; i += 1) { formatStr += '| '; for(let j = 0; j < list[i].length; j += 1) { formatStr += list[i][j]; if(j != list[i].length -1){ formatStr += ' | '; } } formatStr += ' |\r\n'; } return formatStr; } const formatList2 = (list) => { let list2 = []; let maxLength = []; for(let i = 0; i < list.length; i += 1) { for(let j = 0; j < list[i].length; j += 1) { if (i == 0 ) { maxLength[j] = byteLength(list[i][j]); } else { if (maxLength[j] < byteLength(list[i][j])) { maxLength[j] = byteLength(list[i][j]); } } } } for(let i = 0; i < list.length; i += 1) { let col = []; for(let j = 0; j < list[i].length; j += 1) { const cStr = fillStr(list[i][j], maxLength[j]); col.push(cStr); } list2.push(col); } return list2; } const fillStr = (str, len) => { const len1 = Math.floor((len - byteLength(str)) / 2); const len2 = Math.ceil((len - byteLength(str)) / 2); let s = ''; for(let i = 0; i < len1; i += 1) { s += ' '; } s += str; for(let i = 0; i < len2; i += 1) { s += ' '; } return s; } const byteLength = (str) => { let b = 0; const len = str.length; if(len) { for(let i = 0; i < len; i ++) { const c = str.charCodeAt(i); if((c >= 1 && c <= 10000)) { b += 1; }else { b += 2; } } return b; } else { return 0; } } (function() { 'use strict'; // Your code here... GM_log('init'); copyUserListBtn1(); copyUserListBtn2(); jQuery('#copy-user-list1').off("click").on("click", copyUserList); jQuery('#copy-user-list2').off("click").on("click", true,copyUserList); })();