我的electron应用程序中有一个按钮,上面写着“打开文件”,当你点击它时,打开文件对话框就会出现,我可以选择一个文件。
但是,当我从应用程序工具栏中单击菜单项时,如何打开“打开文件对话框”?
这是工具栏菜单子菜单中的我的标签:
label: 'Open',
accelerator: 'CmdOrCtrl+O'
我想做这样的事情:
label: 'Open',
accelerator: 'CmdOrCtrl+O',
role: 'open'
但没有“开放”这样的角色。
如何实现打开打开文件对话框的单击事件?
Main.js打开文件部分:
const ipc = require('electron').ipcMain
const dialog = require('electron').dialog
ipc.on('open-file-dialog', function (event) {
dialog.showOpenDialog({
properties: ['openFile', 'openDirectory']
}, function (files) {
if (files) event.sender.send('selected-file', files)
})
})
index.js:
const ipc = require('electron').ipcRenderer
const selectDirBtn = document.getElementById('open')
selectDirBtn.addEventListener('click', function (event) {
ipc.send('open-file-dialog')
})
ipc.on('selected-file', function (event, path) {
document.getElementById('selected-file').innerHTML = `► ${path}`
document.getElementById('selected-file2').innerHTML = `${path}`
})
Prime:使用IPC在主进程和渲染进程之间进行通信
以下是一个例子:
// main.js
const { app, BrowserWindow, Menu, dialog, ipcMain } = require('electron')
// wait until the app is ready before you can do anything
app.whenReady().then(function() {
// setting up the main window object
const mainWindow = new BrowserWindow({
backgroundColor: '#FFF',
webPreferences: {
// devTools: true,
nodeIntegration: true
},
show: false,
})
// setting up the menu with just two items
const menu = Menu.buildFromTemplate([
{
label: 'Menu',
submenu: [
{
label:'Open File',
accelerator: 'CmdOrCtrl+O',
// this is the main bit hijack the click event
click() {
// construct the select file dialog
dialog.showOpenDialog({
properties: ['openFile']
})
.then(function(fileObj) {
// the fileObj has two props
if (!fileObj.canceled) {
mainWindow.webContents.send('FILE_OPEN', fileObj.filePaths)
}
})
// should always handle the error yourself, later Electron release might crash if you don't
.catch(function(err) {
console.error(err)
})
}
},
{
label:'Exit',
click() {
app.quit()
}
}
]
}
])
Menu.setApplicationMenu(menu)
// now run it
mainWindow.loadURL(`file://${__dirname}/index.html`)
mainWindow.show()
})
不打算显示index.html
您应该知道该怎么做,只需将render.js
包含到超文本标记语言文档中。
现在render.js
// render.js
const { ipcRenderer } = window.require('electron')
ipcRenderer.on('FILE_OPEN', (event, args) => {
// here the args will be the fileObj.filePaths array
// do whatever you need to do with it
console.log('got FILE_OPEN', event, args)
})
这是在电子9上测试运行。X
我有两个按钮,一个不可见的输入文件和一个可见的样式按钮。
<input type="file" id="fileId" style="display:none;" />
<button class="btn-lg btn-primary center-block" type="button"
id="btnLoadFile">Load File</button>
在js中,我设置了样式化的按钮点击事件来触发输入文件点击事件。
document.getElementById('btnLoadFile').addEventListener("click", function(){
document.getElementById('fileId').click();
});
然后,我有一个输入文件元素的更改事件监听器,它对文件进行一些操作。
document.getElementById('fileId').addEventListener('change', function(e){
//use the file here
var files = e.target.files;
var f = files[0]; {
var reader = new FileReader();
var name = f.name;
reader.onload = function (e) {
console.log(e.target.result);
};
reader.readAsBinaryString(f);
}
});
希望这能有所帮助。
我想我的问题以前已经回答过很多次了,但是我找不到确切的我的案例。 我有一个垂直菜单和子菜单,我想显示子菜单,只有当父菜单被点击(不是悬停),一次只显示一个子菜单,在点击菜单的某个地方后,我想要子菜单消失。 这就是我现在得到的--它基于现在的悬停。我试着把a:hover改成类似a:active的东西,但它并不能很好地工作(我在CSS方面不是很好)。 有谁知道吗?
我有一个运行的电子应用程序,到目前为止工作得很好。对于上下文,我需要运行/打开一个外部文件,它是一个Go-lang二进制文件,用于执行一些后台任务。基本上,它将充当后端,并公开Electron应用程序将使用的API。 到目前为止,我所了解的是: > 我试图用"节点方式"打开文件child_process但是我可能由于路径问题而无法打开示例txt文件。 Electron API公开了一个open f
我想知道当菜单按钮的菜单当前打开时,是否可以为菜单按钮设置特定样式(例如,背景色为黑色)。也就是说,如果菜单未打开,则其背景色不应为黑色。我可以在CSS文件中这样做吗?或者甚至可以这样做吗? 我知道菜单按钮有一个显示的方法,它指示我,菜单是否打开,但我不知道应用这个,以便在菜单打开时按钮颜色会发生变化。 这是菜单按钮:https://docs.oracle.com/javase/8/javafx/
你好,我是新的使用硒,我试图从网页上执行一些测试。 这是我的代码: 我可以毫无问题地进入页面,我可以输入登录的用户和密码,但下一页有一个胡佛菜单,我无法使用,并停止自动执行。 这是xpath和csspath: xpath:/html/body/div[3]/div/div/form/div/ul/li[1]/ul/li[1]/a/span csspath: html body div#conten
无法使用SafariDriver Selenium在Safari浏览器中打开上下文菜单。获得以下异常: org . open QA . selenium . web Driver exception:未知命令:< br> {"id":"az1mvyq9x4ly "," name":"mouseMoveTo "," parameters ":< br > { " element ":":wdc:14
问题内容: 我做了以下工作; 这在Mac OS中触发,但在Windows中不触发。在Windows中还有其他事件或其他方式可以执行此操作吗? 问题答案: 这是仅Mac功能。最接近的替代方法是app.makeSingleInstance(callback)。 您可以安排使用url作为参数启动应用程序:myApp my-scheme:// stuff 然后,无论首先启动哪个应用程序进程,都使用url进