近来懒癌有点严重,网上冲浪的时候看到一些有意思的东西经常想发到手机里面看,但是又不想每次都登陆微信之类的东西,毕竟还要把微信打开拿起手机扫码太麻烦了。

表情包
然后想到之前还用 Server 酱他们做的 Wecom 酱在服务器搭了一个 Vinking 酱,平时也就用来收博客评论提醒,或许可以从浏览器这边直接用 Vinking 酱发到微信里面,这样就方便很多了。花了一点点时间做了一个简单的脚本,放到油猴里面就可以运行了。
插件的基本原理是先用 window.getSelection().toString() 获取到鼠标选中的文字,然后监听键盘的ctrl、alt、P ,如果选中不为空的话按下ctrl +alt +P 就可以将选中的文字发到微信里面去。但是测试的时候经常出现微信那边只收到一大段文字的一部分,& 后面的东西收不到了。后面检查的时候才发现忘记给 & 做处理,导致 & 后面的字符串变成了网址参数部分。补上特定字符处理,就符合自己的需求了。

效果
const REPLACEMENT_TEXT = '{and}';
function setupEventHandlers() {
document.body.onmouseup = function() {
let selectText = window.getSelection().toString().trim();
if (selectText.includes("&")) {
selectText = selectText.replace(/&/g, REPLACEMENT_TEXT);
}
if (selectText) {
document.body.onkeydown = function(event) {
if (event.ctrlKey && event.altKey && event.keyCode === 80) {
var Tip = confirm("已经获取选中文字:\n" + selectText + "\n需要转发到 Vinking酱 吗?");
if (Tip) {
/*处理转发*/
}
}
};
}
};
}
setupEventHandlers();
顺带还写了个把网页二维码提取成网址再转发到微信去的插件,用到了 jsQR.js, html2canvas.min.js 和 jQuery 。但是跨域问题给我整不会了,弄了好久之后懒癌发作就放弃了
const BUTTON_STYLE = {
position: 'fixed',
bottom: '50px',
right: '20px'
};
const createButton = document.createElement("button");
createButton.id = "getURL";
Object.assign(createButton.style, BUTTON_STYLE);
createButton.innerHTML = "截取二维码";
document.body.appendChild(createButton);
const createImage = document.createElement("canvas");
createImage.id = "qrcanvas";
createImage.style.display = 'none';
document.body.appendChild(createImage);
const c = document.getElementById("qrcanvas");
const ctx = c.getContext("2d");
createButton.onclick = async function() {
try {
const canvas = await html2canvas(document.body);
const oImg = new Image();
oImg.src = canvas.toDataURL();
await new Promise(resolve => oImg.onload = resolve);
c.setAttribute("width", oImg.width);
c.setAttribute("height", oImg.height);
ctx.drawImage(oImg, 0, 0, oImg.width, oImg.height);
const imageData = ctx.getImageData(0, 0, oImg.width, oImg.height);
const code = jsQR(imageData.data, imageData.width, imageData.height, { inversionAttempts: "dontInvert" });
if (code) {
const Tip = confirm("二维码获取成功,需要转发到 Vinking酱 吗?");
if (Tip) {
// 处理转发
}
} else {
alert("没有找到二维码");
}
} catch (error) {
console.error("Error capturing canvas:", error);
}
}