const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electronAPI', {
sendMessage: (message) => ipcRenderer.send('message', message)
});
const { ipcMain } = require('electron');
ipcMain.on('message', (event, message) => {
console.log('收到消息:', message);
});
window.electronAPI.sendMessage('Hello');
contextBridge.exposeInMainWorld('electronAPI', {
invoke: (channel, data) => ipcRenderer.invoke(channel, data)
});
ipcMain.handle('get-data', async (event, arg) => {
return { result: 'success', data: arg };
});
const result = await window.electronAPI.invoke('get-data', { id: 1 });
console.log(result);
const { BrowserWindow } = require('electron');
const win = new BrowserWindow();
win.webContents.send('update-data', { count: 10 });
contextBridge.exposeInMainWorld('electronAPI', {
onUpdateData: (callback) => {
ipcRenderer.on('update-data', (event, data) => callback(data));
}
});
window.electronAPI.onUpdateData((data) => {
console.log('收到更新:', data);
});
window.electronAPI.sendToOther('hello');
ipcMain.on('send-to-other', (event, message) => {
BrowserWindow.getAllWindows().forEach(win => {
if (win.webContents !== event.sender) {
win.webContents.send('message-from-other', message);
}
});
});
window.electronAPI.onMessageFromOther((message) => {
console.log('收到消息:', message);
});
contextBridge.exposeInMainWorld('fileAPI', {
readFile: (path) => ipcRenderer.invoke('read-file', path),
writeFile: (path, content) => ipcRenderer.invoke('write-file', path, content)
});
const fs = require('fs').promises;
ipcMain.handle('read-file', async (event, path) => {
try {
const content = await fs.readFile(path, 'utf-8');
return { success: true, content };
} catch (error) {
return { success: false, error: error.message };
}
});
ipcMain.handle('write-file', async (event, path, content) => {
try {
await fs.writeFile(path, content, 'utf-8');
return { success: true };
} catch (error) {
return { success: false, error: error.message };
}
});
const result = await window.fileAPI.readFile('/path/to/file.txt');
if (result.success) {
console.log(result.content);
}
contextBridge.exposeInMainWorld('dbAPI', {
getUsers: () => ipcRenderer.invoke('db-get-users'),
createUser: (user) => ipcRenderer.invoke('db-create-user', user)
});
const sqlite3 = require('sqlite3');
const db = new sqlite3.Database('app.db');
ipcMain.handle('db-get-users', async () => {
return new Promise((resolve, reject) => {
db.all('SELECT * FROM users', (err, rows) => {
if (err) reject(err);
else resolve(rows);
});
});
});
ipcMain.handle('db-create-user', async (event, user) => {
return new Promise((resolve, reject) => {
db.run('INSERT INTO users (name, email) VALUES (?, ?)',
[user.name, user.email],
function(err) {
if (err) reject(err);
else resolve({ id: this.lastID });
}
);
});
});
contextBridge.exposeInMainWorld('notificationAPI', {
show: (title, body) => ipcRenderer.send('show-notification', title, body)
});
const { Notification } = require('electron');
ipcMain.on('show-notification', (event, title, body) => {
new Notification({ title, body }).show();
});
window.notificationAPI.show('提示', '操作成功');