1. 程序已经启动,通过点击打开文件,进行打开

this.$dialog.showOpenDialog({title: "打开文件",defaultPath: "",properties: ["openFile"],// properties: ['openFile', 'multiSelections'],filters: [{ name: "Text", extensions: ["icode"] },{ name: "Custom File Type", extensions: ["as"] },{ name: "All Files", extensions: ["*"] }]}).then(result => {if (!result.canceled && result.filePaths.length > 0) {this.$emitNode("tradeMenu", "open", result.filePaths[0]);//  监听主进程读完文件数据this.$onNodeOnce("tradeMenuOpen", (event, arg) => {let trade = openFormat(result.filePaths[0], arg);this.newEditTrade(trade);});}}).catch(err => {console.log(err);});

其中的$dialog,emitNode,onNodeOnce等待都是利用electron的,利用Vue进行封装的,result是选中文件的一系列数据

         Vue.prototype.$onNodeOnce=function(channel, listener){ipcRenderer.once(channel, listener)};// 监听主线程消息Vue.prototype.$onNode = function(channel,listener){ipcRenderer.on(channel, listener)}// 文件弹框全局使用Vue.prototype.$dialog = dialog

2. 在桌面直接打开文件(.html),会自动打开软件,并读取文件, 或者将(.html)文件移动到程序图标上进行打开。

这个分两步,1.让程序能够代开文件,2.程序读取文件路径
"mac": {"icon": "./logo.icns","fileAssociations": [{"ext": ["icode"]}],"target": [{"target": "dmg"}]},"dmg": {"title": "ICODE","icon": "./logo.icns","backgroundColor": "#ffffff","contents": [{"x": 192,"y": 344},{"x": 448,"y": 344,"type": "link","path": "/Applications"}]},

主要利用fileAssociations来注册程序打开后缀名。

 //主线程代码global.fileToOpen = "";app.on('open-file', (event, path) => {// 当用户想要在应用中打开一个文件时发出。 // 事件通常在应用已经打开,并且系统要再次使用该应用打开文件时发出。 // 也会在一个文件被拖到 dock 并且还没有运行的时候发出。 event.preventDefault()fileToOpen = path;//win是打开的窗口,如果程序未启动则不会触发//窗口打开后可通过渲染进程代码global来获取路径if(win){win.webContents.send("activateThenOpenFile",fileToOpen)}});//渲染进程代码(路径得到就ok了)let currentFile = this.$electronRemote.getGlobal('fileToOpen') || null;

3. 程序已经启动,通过点击打开文件,进行打开

//参考2程序以及启动。主进程
if(win){win.webContents.send("activateThenOpenFile",fileToOpen)
}// 渲染进程
// 程序启动后双击-----打开文件this.$onNode("activateThenOpenFile",(event,path)=>{if (__.isString(path) && /\.icode$/.test(path)) {this.$emitNode("tradeMenu", "open", path);//  监听主进程读完文件数据this.$onNodeOnce("tradeMenuOpen", (event, arg) => {let trade = openFormat(path, arg);this.newEditTrade(trade);});}})

4. 程序已经启动,通过移动文件到程序打开的页面,进行打开

这主要就要依赖原生拖拽

 // 拖拽进程序打开文件let drag = document.getElementById("drag")//此方法删除不行drag.addEventListener("dragover",  (e)=>{// 用来hack某些兼容性问题e.dataTransfer.dropEffect = "copy";e.stopPropagation();e.preventDefault();}, false);drag.addEventListener("drop",  (e)=>{e.preventDefault();e.stopPropagation();if(e.dataTransfer.files[0].path){let path = e.dataTransfer.files[0].paththis.$emitNode("tradeMenu", "open", path);//  监听主进程读完文件数据this.$onNodeOnce("tradeMenuOpen", (event, arg) => {let trade = openFormat(path, arg);this.newEditTrade(trade);});}}, false);

以上代码无法粘贴复制直接使用,但是能够提供方向,以及一些重要API方法。

electron打开文件的几种实现方式相关推荐

  1. Electron打开文件并获得绝对路径方式

    Electron打开文件并获得绝对路径方式 在桌面应用中,点击一个按钮,选择一个文件,后台再得到绝对路径进行后续处理是常见的实现. 如采用Input标签File导入的方式,如下示例: <!DOC ...

  2. python 读写数据文件的6种常用方式

    本文主要介绍python读写数据文件的6种常用方式. 1. python内置方法 with open(r'test.xlsx') as f:a = f.read() 一般,在应用上述上下文管理器后,可 ...

  3. Windows下,文件(夹)选择/打开对话框的三种创建方式

    Windows编程时,常用到打开文件(夹)对话框,选择文件或者多个文件的功能.Windows提供了好几种方式,现在做个总结,也好方便以后的使用. 常用的方式有三种: 1.1 使用OPENFILENAM ...

  4. 记录一下前端针对下载文件的两种请求方式

    之前做了很多下载文件的接口都没习惯进行记录,现在开始规范自己,让自己养成一个随手保存代码的好习惯.写的不足之处请指出,会改正. 说一下前端下载文件常用的两种方式,get请求和post请求 get请求相 ...

  5. C/C++——打开文件存储数据的各种方式

    文件操作 打开文件 文件名 注意路径名中的斜杠要双写,如: "D:\MyFiles\ReadMe.txt" 文件打开方式选项: ios::in = 0x01, //供读,文件不存在 ...

  6. Web前端下载文件的几种常见方式

    1 标签or点击事件 标签下载 <a href="xxxxx"> 或 <a href="xxxxx" download="xxxx& ...

  7. c语言文件打开方式字符串,C语言打开文件-C语言打开文件的方式-C语言以只读方式打开文件-C语言以读写方式打开文件-嗨客网...

    C语言打开文件教程 在 在 C 语言中,打开文件使用 fopen C语言fopen函数详解 语法 FILE *fopen(char *filename, char *mode); 参数 参数 描述 f ...

  8. Electron 打开文件资源管理器窗口和打开文件

    1.引入相关模块: imports = {}; imports.remote = require('electron').remote; imports.shell = require('electr ...

  9. 用C语言打开文件的几种方式及区别

    文件使用方式 含义 如果指定的文件不存在 r(只读) 读取一个已经存在的文本文件 出错 w(只写) 打开一个文本文件,输出数据,若文件存在则文件长度清为0,即该文件内容会消失 建立新文件 a (追加) ...

最新文章

  1. vue.js+socket.io打造一个好玩的新闻社区
  2. [精华][推荐]CAS SSO单点登录服务端客户端学习
  3. windows mongodb 安装
  4. yum报错[Errno 256] No more mirrors to try.
  5. xampp for mac mysql_xampp for mac下载-Xampp Mac版下载 V7.3.2-PC6苹果网
  6. 7.Appium 安卓自动化(Package与Activity)
  7. Java实现查看SEGY(.su格式)数据道头字信息的GUI图形用户界面
  8. 全面使用禅道做敏捷开发的规范化管理分享
  9. 基于VUE实现的新闻后台管理系统-三
  10. 系统账号自动退出时长哪里设置
  11. Mike and Chocolate Thieves(CF #361 Div. 2)
  12. 百度itextpdf工具类,快速生成PDF打印模板,itextpdf5加公章
  13. 怎么重置计算机网络设置密码,路由器密码怎么重置 路由器密码重置方法【详解】...
  14. 工作过程中积累的书签(链接)
  15. 2018海康威视前端面经
  16. HINet | 性能炸裂,旷视科技提出适用于low-level问题的Half Instance Normalization
  17. c语言中查重,体验CCleaner查重功能,快速找出电脑中的重复文件
  18. Microsoft Project 2010 简介
  19. PTA 1070 结绳
  20. 【教程】PDF组件Spire.PDF 教程:在C#中显示PDF文件的打印预览

热门文章

  1. 秒表计时器——Java基础练手项目(Java课程设计)
  2. AdaCliP: Adaptive Clipping for Private SGD
  3. CultureInfo 类中需要的【区域性名称】查询
  4. 极客日报第 73 期:Twitter 正谈判收购印度初创公司 ShareChat:欲打造 TikTok 竞品;华为 Mate X2 正式发布,17999 元起;爱奇艺员工10万“买”了个北京
  5. 中国内地城市CA分布
  6. [vuex] unknown action type: jia1
  7. 全平台福利集合大放送!24h后立刻删!冲!
  8. 8. spark学习之旅(二)
  9. 华科学子连续三年入选华为 “天才少年” !毕业生获201万最高档年薪!
  10. Python列表的相关操作