1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
window.addEventListener("contextmenu", (e) => { e.preventDefault(); const domName = e.target.localName; if (domName === "img") { if (e.target.id === "") { const date = new Date().valueOf(); e.target.id = date; } window.rightMenu.show(e.target.id, e.target.currentSrc); } });
const rightMenu = initRightMenu(); function initRightMenu() { const rightTemplate = [ { label: "复制图片", click: () => { console.log("复制图片"); mainWindow.webContents.send("copyImage", { domId: clickDomId, imageUrl:clickImageUrl }); }, } ]; const menu = Menu.buildFromTemplate(rightTemplate); return menu; }
let clickDomId = null let clickImageUrl = null ipcMain.handle("show-context-menu", (event, args) => { const { domId,imageUrl } = args; clickDomId = domId; clickImageUrl = imageUrl; rightMenu.popup({ window: mainWindow.webContents, callback: () => (clickDomId = null), }); });
contextBridge.exposeInMainWorld("rightMenu", { show: (domId,currentSrc) => ipcRenderer.invoke("show-context-menu", { domId,currentSrc }), });
ipcRenderer.on("copyImage", (event, args) => { const { domId,imageUrl } = args; imageToBase64(imageUrl) });
const imageToBase64 = (url) => { let image = new Image(); image.crossOrigin = ""; image.src = url; image.onload = function () { const base64 = getBase64Image(image); const img = nativeImage.createFromDataURL(base64) clipboard.writeImage(img) }; };
const getBase64Image = (img) => { const canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; const ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, img.width, img.height); let ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase(); if (ext === "jpg") { ext = "jpeg"; } const dataURL = canvas.toDataURL("image/" + ext); return dataURL; };
|