Electron-学习笔记(5)

157 阅读1分钟

1.原生文件拖&放

实现从窗口中拖出的文件的示例 在 preload.js 中使用 contextBridge注入方法 window.electron.startDrag(...) 将向主进程发送IPC消息。

image.png

添加一个可拖动元素到 index.html, 并引用你的渲染器脚本:

<div style="border:2px solid black;border-radius:3px;padding:5px;display:inline-block" draggable="true" id="drag">拖动我</div>
<script src="renderer.js"></script>

在 renderer.js 通过调用通过上述 contextBridge 添加的方法来设置渲染器进程处理拖动事件。

document.getElementById('drag').ondragstart = (event) => {
  event.preventDefault()
  window.electron.startDrag('drag-and-drop.md')
}

在主进程中(main.js 文件),将收到的事件带上文件路径和图标扩展到正在拖动的文件:

const { ipcMain } = require('electron')

ipcMain.on('ondragstart', (event, filePath) => {
  event.sender.startDrag({
    file: filePath,
    icon: '/icon.png'
  })
})

效果图如下:

image.png

2.离屏渲染

离屏渲染允许你以位图的方式来获取 BrowserWindow 中的内容,所以它可以在任何地方被渲染

示例

const { app, BrowserWindow } = require('electron')
const fs = require('fs')

app.disableHardwareAcceleration()

let win

app.whenReady().then(() => {
  win = new BrowserWindow({ webPreferences: { offscreen: true } })

  win.loadURL('https://github.com')
  win.webContents.on('paint', (event, dirty, image) => {
    fs.writeFileSync('ex.png', image.toPNG())
  })
  win.webContents.setFrameRate(60)
})