Pinterest Copy Links

点击复制到剪贴板,多次点击多次累积;右下角问号出重置,点重置清理剪贴板。

  1. // ==UserScript==
  2. // @name Pinterest Copy Links
  3. // @namespace http://leizingyiu.net/
  4. // @version 20241125
  5. // @description 点击复制到剪贴板,多次点击多次累积;右下角问号出重置,点重置清理剪贴板。
  6. // @author leizingyiu
  7. // @match *://*.pinterest.*/*
  8. // @grant GM_setClipboard
  9. // @license GNU AGPLv3
  10. // ==/UserScript==
  11.  
  12. (function () {
  13. 'use strict';
  14.  
  15. let clipboardContent = ''; // 用于累积复制的链接
  16.  
  17. // let hoverstyle = document.createElement('style');
  18. // hoverstyle.innerText=`
  19. // [data-test-id]:hover .copy-link-btn{
  20. // opacity:1;
  21. // }`;
  22. // document.body.appendChild(hoverstyle);
  23.  
  24. var 样式名称='yiu_pin_copying';
  25. // 为每个项目添加复制链接按钮
  26. function addCopyButton() {
  27. if(!document.body.classList.contains(样式名称)){
  28. return ;
  29. }
  30. const items = document.querySelectorAll('[data-test-id="pin"]'); // 定位到瀑布流项
  31. items.forEach((item) => {
  32. // 检查是否已添加按钮
  33. if (item.querySelector('.copy-link-btn')) return;
  34.  
  35. // 获取超链接
  36. const linkElement = item.querySelector('a[href]');
  37. if (!linkElement) return;
  38.  
  39. const href = linkElement.href;
  40.  
  41. // 创建按钮
  42. const copyButton = document.createElement('button');
  43. copyButton.textContent = '复制链接';
  44. copyButton.className = 'copy-link-btn';
  45.  
  46. copyButton.style.display = 'block';
  47. copyButton.style.marginTop = '8px';
  48. copyButton.style.backgroundColor = '#E60023';
  49. copyButton.style.color = 'white';
  50. copyButton.style.border = 'none';
  51. copyButton.style.borderRadius = '26px';
  52. copyButton.style.padding = '6px 12px';
  53. copyButton.style.cursor = 'pointer';
  54. copyButton.style.fontSize = '14px';
  55. copyButton.style.opacity=0;
  56. copyButton.style.transition='opacity ease 0.4s';
  57.  
  58. // 按钮点击逻辑
  59. copyButton.addEventListener('click', (e) => {
  60. // clipboardContent += clipboardContent ? `\n${href}` : href; // 累积链接
  61. clipboardContent=clipboardContent.split('\n');
  62. clipboardContent.push(href);
  63. clipboardContent=[...new Set(clipboardContent)];
  64. clipboardContent=clipboardContent.join('\n');
  65.  
  66.  
  67. copyButton.style.opacity='0!important';
  68. copyButton.textContent = '复制链接✅';
  69. console.log(copyButton,copyButton.style.opacity);
  70. setTimeout(()=>{
  71. copyButton.style.opacity='1!important';
  72. copyButton.textContent = '复制链接';
  73. console.log(copyButton,copyButton.style.opacity);
  74. },500);
  75. GM_setClipboard(clipboardContent); // 复制到剪贴板
  76. // alert(`链接已复制:\n${href}`);
  77. });
  78.  
  79. // 将按钮插入到项目中
  80. const saveButton = item.querySelector('button'); // 保存按钮
  81. if (saveButton) {
  82. saveButton.parentNode.appendChild(copyButton);
  83. }
  84. setTimeout(()=>{
  85. copyButton.style.opacity=1;
  86. },1);
  87. });
  88. }
  89.  
  90. // 创建问号和重置按钮
  91. function createResetButton() {
  92. // 问号容器
  93. const helpContainer = document.createElement('div');
  94. helpContainer.style.position = 'fixed';
  95. helpContainer.style.bottom = '20px';
  96. helpContainer.style.right = '20px';
  97. helpContainer.style.zIndex = '9999';
  98. helpContainer.style.cursor = 'pointer';
  99.  
  100. const helpIcon = document.createElement('div');
  101. helpIcon.textContent = '?';
  102. helpIcon.style.width = '40px';
  103. helpIcon.style.height = '40px';
  104. helpIcon.style.borderRadius = '50%';
  105. helpIcon.style.backgroundColor = '#E60023';
  106. helpIcon.style.color = 'white';
  107. helpIcon.style.display = 'flex';
  108. helpIcon.style.justifyContent = 'center';
  109. helpIcon.style.alignItems = 'center';
  110. helpIcon.style.fontSize = '24px';
  111. helpIcon.style.fontWeight = 'bold';
  112. helpIcon.style.transition = 'all 0.3s';
  113.  
  114. // 重置按钮
  115. const resetButton = document.createElement('button');
  116. resetButton.textContent = '重置剪贴板';
  117. resetButton.style.position = 'absolute';
  118. resetButton.style.width = '10em';
  119. resetButton.style.right = '60px';
  120. resetButton.style.bottom = '0';
  121. resetButton.style.backgroundColor = '#FF4500';
  122. resetButton.style.color = 'white';
  123. resetButton.style.border = 'none';
  124. resetButton.style.borderRadius = '4px';
  125. resetButton.style.padding = '8px 12px';
  126. resetButton.style.cursor = 'pointer';
  127. resetButton.style.fontSize = '14px';
  128. resetButton.style.opacity = '0';
  129. resetButton.style.transition = 'opacity 0.3s';
  130. resetButton.style.pointerEvents = 'none';
  131.  
  132. // 问号 hover 显示按钮
  133. helpIcon.addEventListener('mouseover', () => {
  134. resetButton.style.opacity = '1';
  135. resetButton.style.pointerEvents = 'auto';
  136. });
  137. helpIcon.addEventListener('mouseout', () => {
  138. setTimeout(() => {
  139. if (!resetButton.matches(':hover')) {
  140. resetButton.style.opacity = '0';
  141. resetButton.style.pointerEvents = 'none';
  142. }
  143. }, 200);
  144. });
  145.  
  146. // 鼠标移到按钮上保持显示
  147. resetButton.addEventListener('mouseover', () => {
  148. resetButton.style.opacity = '1';
  149. resetButton.style.pointerEvents = 'auto';
  150. });
  151.  
  152. // 重置按钮点击逻辑
  153. resetButton.addEventListener('click', () => {
  154. clipboardContent = '';
  155. // alert('剪贴板已清空');
  156. });
  157.  
  158. helpContainer.appendChild(helpIcon);
  159. helpContainer.appendChild(resetButton);
  160. document.body.appendChild(helpContainer);
  161. }
  162.  
  163. // 初始化
  164. function init() {
  165. createResetButton();
  166. setInterval(addCopyButton, 250); // 定时检查新加载的项目
  167.  
  168.  
  169. // 监听键盘按键事件
  170. document.addEventListener('keydown', function (event) {
  171. if (event.altKey && event.code === 'KeyC') {
  172. const body = document.body;
  173. if (body.classList.contains(样式名称)) {
  174. body.classList.remove(样式名称);
  175. } else {
  176. body.classList.add(样式名称);
  177. }
  178. event.preventDefault();
  179. }
  180. });
  181. document.body.classList.add(样式名称);
  182.  
  183.  
  184. }
  185.  
  186. // 延迟等待页面加载完成
  187. window.addEventListener('load', init);
  188. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址