Javascript 电子-从菜单打开文件

Javascript 电子-从菜单打开文件,javascript,node.js,electron,Javascript,Node.js,Electron,我的electron应用程序中有一个按钮,上面写着“打开文件”,当你点击它时,打开文件对话框就会出现,我可以选择一个文件 但是,当我从应用程序工具栏中单击菜单项时,如何打开“打开文件对话框” 这是工具栏菜单子菜单中的我的标签: label: 'Open', accelerator: 'CmdOrCtrl+O' 我想做一些类似的事情: label: 'Open', accelerator: 'CmdOrCtrl+O', role: 'open' 但没有“开放”这样的角色 如何实现打开“打开文件

我的electron应用程序中有一个按钮,上面写着“打开文件”,当你点击它时,打开文件对话框就会出现,我可以选择一个文件

但是,当我从应用程序工具栏中单击菜单项时,如何打开“打开文件对话框”

这是工具栏菜单子菜单中的我的标签:

label: 'Open',
accelerator: 'CmdOrCtrl+O'
我想做一些类似的事情:

label: 'Open',
accelerator: 'CmdOrCtrl+O',
role: 'open'
但没有“开放”这样的角色

如何实现打开“打开文件”对话框的单击事件

Main.js打开文件部分:

index.js:


我有两个按钮,一个不可见的输入文件和一个可见的样式按钮

<input type="file" id="fileId" style="display:none;" />
<button class="btn-lg btn-primary center-block" type="button"
    id="btnLoadFile">Load File</button>
然后我有一个用于输入文件元素的on-change事件监听器,它对文件执行一些操作

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);
    }
});

希望这有帮助。

Prime:使用IPC在主进程和渲染进程之间进行通信

以下是一个例子:

//main.js const{app,browser窗口,菜单,对话框,ipcMain}=require'electron' //等待应用程序准备就绪,然后才能执行任何操作 app.whenReady.then函数{ //设置主窗口对象 const main window=新浏览器窗口{ 背景颜色:“FFF”, 网络首选项:{ //devTools:没错, 无融合:对 }, 秀:假,, } //仅使用两项设置菜单 const menu=menu.buildFromTemplate[ { 标签:“菜单”, 子菜单:[ { 标签:'打开文件', 加速器:“CmdOrCtrl+O”, //这是点击事件的主要位劫持 点击{ //构造“选择文件”对话框 dialog.showOpenDialog{ 属性:['openFile'] } .Then函数文件对象{ //fileObj有两个道具 如果!fileObj.已取消{ main window.webContents.send'FILE\u OPEN',fileObj.filepath } } //你应该自己处理错误,如果你不处理,以后的电子释放可能会崩溃 凯瑟先生{ console.error } } }, { 标签:'退出', 点击{ app.quit } } ] } ] Menu.setApplicationEnumMenu //现在运行它 mainWindow.loadURL`file://${\uuuu dirname}/index.html` 主窗口显示 } 不显示index.html您应该知道该怎么做,只需将render.js包含到html文档中即可

现在是render.js

//render.js const{ipcrender}=window.require'electron' ipcRenderer.on'FILE_OPEN',事件,args=>{ //这里的参数是fileObj.filepath数组 //用它做任何你需要做的事 console.log'get FILE_OPEN',事件,args }
这是在Electron 9.X上测试运行的

我不认为这解决了OP关于让菜单栏的打开功能工作的问题。
<input type="file" id="fileId" style="display:none;" />
<button class="btn-lg btn-primary center-block" type="button"
    id="btnLoadFile">Load File</button>
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);
    }
});