您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
获取浏览器剪切板内容并跨设备分享
// ==UserScript== // @name 获取浏览器剪切板内容 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 获取浏览器剪切板内容并跨设备分享 // @author You // @match https://192.168.1.111:3000 // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @license MIT // @grant none // ==/UserScript== (function () { 'use strict'; const key = new Date().getTime(); const msgList = []; let isSave = false; let currentSendData = ""; var ws = new WebSocket("wss://192.168.1.111:3000"); //申请一个WebSocket对象,参数是服务端地址,同http协议使用http://开头一样,WebSocket协议的url使用ws://开头,另外安全的WebSocket协议使用wss://开头 ws.onopen = function () { //当WebSocket创建成功时,触发onopen事件 ws.send(JSON.stringify({ type: "connection", data: key })); //将消息发送到服务端 } ws.onmessage = async function (e) { //当客户端收到服务端发来的消息时,触发onmessage事件,参数e.data包含server传递过来的数据 try { const data = JSON.parse(e.data); // web-clipboard数据 if ("data" == data.type) { // const otherData = data.data.filter(item => { // return key != item.name; // }) console.log('接收到的数据:', data.data); // 这里把接收到的数据保存到剪切板 msgList.push(data.data); isSave = true; const currentData = msgList.sort((a, b) => { return b.date - a.date; })[0].data; const res = await saveDataToWebClipboard(currentData); isSave = false; document.body.innerText = currentData; } } catch (error) { } } ws.onclose = function (e) { //当客户端收到服务端发送的关闭连接请求时,触发onclose事件 console.log("close"); } ws.onerror = function (e) { //如果出现连接、处理、接收、发送数据失败的时候触发onerror事件 console.log(e); } // 获取剪切板中的数据 const getWebClipboard = async () => { try { if (navigator.clipboard) { const text = await navigator.clipboard.readText(); return text; } } catch (error) { } return ""; } // 保存数据到剪切板中 const saveDataToWebClipboard = async (data) => { try { if (navigator.clipboard) { const text = new Blob([data], { type: 'text/plain' }); const item = new ClipboardItem({ 'text/plain': text }); await navigator.clipboard.write([item]); return true; } } catch (error) { } return false; } setInterval(async () => { const data = await getWebClipboard(); // 避免重复发送消息。 保存过程中不能发送消息 if (data != "" && msgList.sort((a, b) => { return b.date - a.date; })?.[0]?.data != data && !isSave && data != currentSendData) { ws.send(JSON.stringify({ type: "pushData", data: { name: key, data } })); currentSendData = data; } }, 2000) })();