您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
复制文字内容到剪切板
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/492927/1362733/copy_textjs.js
- // ==UserScript==
- // @name copy_text.js
- // @namespace https://github.com/iibeibei
- // @version 0.0.1
- // @description 复制文字内容到剪切板
- // @author Beibei
- // @license GPLv3
- // @match *://*/*
- // ==/UserScript==
- self.copyText = function (button, content, success) {
- if (!button) {
- return;
- }
- if (typeof content == 'function') {
- success = content;
- content = null;
- }
- success = success || function () {};
- // 是否降级使用
- var isFallback = !navigator.clipboard;
- if (typeof button == 'string' && !content) {
- if (content === false) {
- isFallback = true;
- }
- content = button;
- button = null;
- }
- var eleTextarea = document.querySelector('#tempTextarea');
- if (!eleTextarea && isFallback) {
- eleTextarea = document.createElement('textarea');
- eleTextarea.style.width = 0;
- eleTextarea.style.position = 'fixed';
- eleTextarea.style.left = '-999px';
- eleTextarea.style.top = '10px';
- eleTextarea.setAttribute('readonly', 'readonly');
- document.body.appendChild(eleTextarea);
- }
- var funCopy = function (text, callback) {
- callback = callback || function () {};
- if (!isFallback) {
- navigator.clipboard.writeText(text).then(
- function () {
- callback();
- // 成功回调
- success(text);
- },
- function () {
- // 禁止写入剪切板后使用兜底方法
- copyText(text, false);
- callback();
- // 成功回调
- success(text);
- }
- );
- return;
- }
- eleTextarea.value = text;
- eleTextarea.select();
- document.execCommand('copy', true);
- callback();
- // 成功回调
- success(text);
- };
- // 提示复制成功的方法
- // 对外可访问
- copyText.tips = function (event) {
- if (!event) {
- return;
- }
- // 复制成功提示
- var eleTips = document.createElement('span');
- eleTips.className = 'text-popup';
- eleTips.innerHTML = '复制成功';
- document.body.appendChild(eleTips);
- // 事件
- eleTips.addEventListener('animationend', function () {
- eleTips.parentNode.removeChild(eleTips);
- });
- // For IE9
- if (!history.pushState) {
- setTimeout(function () {
- eleTips.parentNode.removeChild(eleTips);
- }, 1000);
- }
- eleTips.style.left = event.pageX - eleTips.clientWidth / 2 + 'px';
- eleTips.style.top = event.pageY - eleTips.clientHeight + 'px';
- };
- var strStyle =
- '.text-popup { animation: textPopup 1s both; -ms-transform: translateY(-20px); color: #01cf97; user-select: none; white-space: nowrap; position: absolute; z-index: 99; }@keyframes textPopup {0%, 100% { opacity: 0; } 5% { opacity: 1; } 100% { transform: translateY(-50px); }}';
- var eleStyle = document.querySelector('#popupStyle');
- if (!eleStyle) {
- eleStyle = document.createElement('style');
- eleStyle.id = 'popupStyle';
- eleStyle.innerHTML = strStyle;
- document.head.appendChild(eleStyle);
- }
- if (!button) {
- funCopy(content);
- return;
- }
- // 事件绑定
- button.addEventListener('click', function (event) {
- var strCopy = content;
- if (content && content.tagName) {
- strCopy = content.textContent || content.value;
- }
- // 复制的文字内容
- if (!strCopy) {
- return;
- }
- funCopy(strCopy, function () {
- copyText.tips(event);
- });
- });
- };