From 8bcc7ccb1fc863c517981de29f740047024292de Mon Sep 17 00:00:00 2001 From: shixiaohua Date: Fri, 5 Jan 2024 16:24:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=89=93=E5=BC=80=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 2 +- main.js | 6 +- preload.js | 7 +- preload1.js | 12 --- preload2.js | 9 -- renderer2.js | 4 - src/comment/FileDirOperate.mjs | 9 ++ src/comment/TopMenu.js | 122 +++++++++++++++++++++++++ renderer.js => src/comment/renderer.js | 1 + 9 files changed, 142 insertions(+), 30 deletions(-) delete mode 100644 preload1.js delete mode 100644 preload2.js delete mode 100644 renderer2.js create mode 100644 src/comment/FileDirOperate.mjs create mode 100644 src/comment/TopMenu.js rename renderer.js => src/comment/renderer.js (84%) diff --git a/index.html b/index.html index e919a80..d1c9f20 100644 --- a/index.html +++ b/index.html @@ -14,6 +14,6 @@
Drag me - File 2
- + \ No newline at end of file diff --git a/main.js b/main.js index de4add1..194d689 100644 --- a/main.js +++ b/main.js @@ -1,9 +1,9 @@ // npm start -const { app, BrowserWindow , ipcMain } = require('electron') +const { app,Menu, BrowserWindow , ipcMain } = require('electron') const path = require('path') const fs = require('fs') const https = require('https') - +const template = require('./src/comment/TopMenu.js') // electorn const createWindow = () => { // Create the browser window. @@ -17,8 +17,10 @@ const createWindow = () => { // 加载 index.html win.loadFile('index.html') // win.loadURL('http://localhost/show/sync?current=1&pageSize=5') + // 打开开发工具 win.webContents.openDevTools() + Menu.setApplicationMenu(Menu.buildFromTemplate(template.template)) } const iconName = path.join(__dirname, 'iconForDragAndDrop.png') // const icon = fs.createWriteStream(iconName) diff --git a/preload.js b/preload.js index e164dbb..e58e782 100644 --- a/preload.js +++ b/preload.js @@ -1,7 +1,10 @@ +// 预加载脚本 在上下文隔离渲染器进程中导入 Node.js 和 Electron 模块的概念 // 所有的 Node.js API接口 都可以在 preload 进程中被调用. // 它拥有与Chrome扩展一样的沙盒。 const { contextBridge, ipcRenderer } = require('electron/renderer') - +// 读取文件夹中文件,并传给渲染层 +// import { unlink } from 'node:fs/promises'; contextBridge.exposeInMainWorld('electron', { - startDrag: (fileName) => ipcRenderer.send('ondragstart', fileName) + startDrag : (fileName) => ipcRenderer.send('ondragstart', fileName), + listDirFile :(fileName)=>ipcRenderer.send('ondragstart', fileName) }) \ No newline at end of file diff --git a/preload1.js b/preload1.js deleted file mode 100644 index a7bd987..0000000 --- a/preload1.js +++ /dev/null @@ -1,12 +0,0 @@ -// 所有的 Node.js API接口 都可以在 preload 进程中被调用. -// 它拥有与Chrome扩展一样的沙盒。 -window.addEventListener('DOMContentLoaded', () => { - const replaceText = (selector, text) => { - const element = document.getElementById(selector) - if (element) element.innerText = text - } - - for (const dependency of ['chrome', 'node', 'electron']) { - replaceText(`${dependency}-version`, process.versions[dependency]) - } - }) \ No newline at end of file diff --git a/preload2.js b/preload2.js deleted file mode 100644 index 5fd9da5..0000000 --- a/preload2.js +++ /dev/null @@ -1,9 +0,0 @@ -const { contextBridge, ipcRenderer } = require('electron') - -contextBridge.exposeInMainWorld('versions', { - node: () => process.versions.node, - chrome: () => process.versions.chrome, - electron: () => process.versions.electron, - ping: () => ipcRenderer.invoke('ping') - // 除函数之外,我们也可以暴露变量 -}) \ No newline at end of file diff --git a/renderer2.js b/renderer2.js deleted file mode 100644 index 004a95b..0000000 --- a/renderer2.js +++ /dev/null @@ -1,4 +0,0 @@ -const func = async () => { - const response = await window.versions.ping() - console.log(response) // 打印 'pong' - } diff --git a/src/comment/FileDirOperate.mjs b/src/comment/FileDirOperate.mjs new file mode 100644 index 0000000..5f9d3ac --- /dev/null +++ b/src/comment/FileDirOperate.mjs @@ -0,0 +1,9 @@ +// https://nodejs.org/docs/latest-v16.x/api/fs.html +import { readdir } from 'node:fs/promises'; +try { + const files = await readdir("/home/shixiaohua"); + for (const file of files) + console.log(file); +} catch (err) { + console.error(err); +} \ No newline at end of file diff --git a/src/comment/TopMenu.js b/src/comment/TopMenu.js new file mode 100644 index 0000000..f26c1c4 --- /dev/null +++ b/src/comment/TopMenu.js @@ -0,0 +1,122 @@ +const { app, Menu, shell} = require('electron') + +const isMac = process.platform === 'darwin' + +exports.template = [ + // { role: 'appMenu' } + ...(isMac + ? [{ + label: app.name, + submenu: [ + { role: 'about' }, + { type: 'separator' }, + { role: 'services' }, + { type: 'separator' }, + { role: 'hide' }, + { role: 'hideOthers' }, + { role: 'unhide' }, + { type: 'separator' }, + { role: 'quit' } + ] + }] + : []), + // { role: 'fileMenu' } + { + label: 'File', + submenu: [ + {label:'打开目录', + click: async () => { + const { dialog } = require('electron') + dialog.showOpenDialog({ + properties: ['openDirectory'] + }).then(result => { + console.log(result.canceled) + // 不取消就发送目录 + if (!result.canceled) + console.log(result.filePaths) + }).catch(err => { + console.log(err) + }) + } + }, + isMac ? { role: 'close' } : { role: 'quit' }, + isMac ? { role: 'open' } : { role: 'open' } + ] + }, + // { role: 'editMenu' } + { + label: 'Edit', + submenu: [ + { role: 'undo' }, + { role: 'redo' }, + { type: 'separator' },// 分割线 + { role: 'cut' }, + { role: 'copy' }, + { role: 'paste' }, + ...(isMac + ? [ + { role: 'pasteAndMatchStyle' }, + { role: 'delete' }, + { role: 'selectAll' }, + { type: 'separator' }, + { + label: 'Speech', + submenu: [ + { role: 'startSpeaking' }, + { role: 'stopSpeaking' } + ] + } + ] + : [ + { role: 'delete' }, + { type: 'separator' }, + { role: 'selectAll' } + ]) + ] + }, + // { role: 'viewMenu' } + { + label: 'View', + submenu: [ + { role: 'reload' }, + { role: 'forceReload' }, + { role: 'toggleDevTools' }, + { type: 'separator' }, + { role: 'resetZoom' }, + { role: 'zoomIn' }, + { role: 'zoomOut' }, + { type: 'separator' }, + { role: 'togglefullscreen' } + ] + }, + // { role: 'windowMenu' } + { + label: 'Window', + submenu: [ + { role: 'minimize' }, + { role: 'zoom' }, + ...(isMac + ? [ + { type: 'separator' }, + { role: 'front' }, + { type: 'separator' }, + { role: 'window' } + ] + : [ + { role: 'close' } + ]) + ] + }, + { + role: 'help', + submenu: [ + { + label: 'Learn More', + click: async () => { + const { shell } = require('electron') + await shell.openExternal('http://www.huaruyu.com') + } + } + ] + } +] diff --git a/renderer.js b/src/comment/renderer.js similarity index 84% rename from renderer.js rename to src/comment/renderer.js index 4be771a..b62be18 100644 --- a/renderer.js +++ b/src/comment/renderer.js @@ -1,3 +1,4 @@ +// html中使用的js代码 之后用react替换 document.getElementById('drag1').ondragstart = (event) => { event.preventDefault() window.electron.startDrag('drag-and-drop-1.md')