electron 打包后 __static_electron開發客戶端注意事項(兼開源個人知識管理工具“想學嗎”)...

窗口間通信的問題

electron窗口通信比nwjs要麻煩的多

electron分主進程和渲染進程,渲染進程又分主窗口的渲染進程和子窗口的渲染進程

主窗口的渲染進程給子窗口的渲染進程發消息

subWin.webContents.on('dom-ready', () => {subWin.webContents.send('message', {title: self.$root.a[self.$root.aIndex].title,content: window.UE.instants.ueditorInstant0.getContent(),id: self.$root.a[self.$root.aIndex].id,winId: item.winId,siteId: item.id,url,type});
});

子窗口的渲染進程接收消息的代碼

ipcRenderer.on('message', (event, article) => {console.log(article);
})

注意,應該dom-ready了之后再發,要不然你的子窗口進程有可能接收不到消息

子窗口的渲染進程給主窗口的渲染進程發消息比較麻煩

子窗口要先把消息發送給主進程,再由主進程中轉給主窗口

const { ipcRenderer} = require('electron');
ipcRenderer.send('articleRefreshMain', {siteId:'cnblogs',url: url});

主進程接收消息后中轉給主窗口渲染進程的代碼

import { app, BrowserWindow,ipcMain } from 'electron'
ipcMain.on('articleRefreshMain', (event, message) => {mainWindow.webContents.send('contentRefreshRenderer', message);
});

主窗口渲染進程接收消息的代碼

ipcRenderer.on('articleRefreshRenderer', (e, message) => {self.$root.a[self.$root.aIndex][message.siteId] = {url: message.url}self.$root.needSave.a = true;
});

監聽編輯器內圖片刪除的事件

通過黏貼或者拖拽進編輯器的圖片,我把它復制到了文章的目錄(用戶本地目錄)

如果用戶在編輯文章的過程中,又刪了這個圖片,那么我應該在目錄中也刪除這個圖片

這就需要監控文章編輯器的圖片變化

我用的是H5的MutationObserver對象,理論上,用這個東西可以監控任何DOM的變化

var editorDocument = document.getElementById("ueditor_0").contentWindow.document;
var observer = new MutationObserver(records => {self.$root.needSave.c = true;records.forEach((item, index) => {if (item.removedNodes.length > 0 && item.removedNodes[0].tagName == "IMG") {var path = decodeURI(item.removedNodes[0].src.substr(7));fs.unlink(path, err => {if (err) console.log(err);});}});
});
observer.observe(editorDocument, {childList: true,subtree: true
});

electron-vue獲取app版本號的hack代碼

本來electron獲取app版本號很簡單,只要如下即可(以下代碼運行在main進程中)

import { app, BrowserWindow,ipcMain } from 'electron'
var versionStr = app.getVersion();

getVersion: 如果應用程序的 package. json 文件中找不到版本號, 則返回當前包或者可執行文件的版本(就是electron的版本號)。

因為我用的electron-vue,他又兩種模式,生產模式和開發模式

在生產模式下沒任何問題

在開發模式下,它其實是起了一個webserver,讓electron加載一個localhost的地址

這樣做主要是為了使用vue的hotload的優勢

但這樣的話,electron就找不到 package. json 文件中的版本號了

怎么辦呢?

我們在應用啟動的時候,先在主進程中把版本號拿出來

if (process.env.NODE_ENV !== 'development') {global.__static = require('path').join(__dirname, '/static').replace(//g, '')winURL = `file://${__dirname}/index.html`;
}else{app.getVersion = ()=> curVersion;winURL = `http://localhost:9080`;
}

注意,我們通過app.getVersion = ()=> curVersion;把getVersion方法給hack了

把文章內容填入特殊的網站編輯器中

在處理文章提交到知乎的過程中

發現知乎用了一個特殊的編輯器,

(一個基于reactjs的編輯器,github上有開源的,忘記地址了)

怎么搞都搞不定,他甚至不支持設置HTML的內容

最后用了electron的操作剪切板的能力才搞定的

先把文章內容放到剪貼板,再focus知乎的編輯器,再執行黏貼事件

代碼如下:

const {clipboard,ipcRenderer,remote
} = require('electron');var win = remote.BrowserWindow.fromId(this.winId);win.focus();setTimeout(function () {document.getElementsByClassName("WriteIndex-titleInput")[0].children[0].focus();clipboard.writeText(this.title);win.webContents.paste();setTimeout(function () {document.getElementsByClassName("public-DraftEditor-content")[0].click();clipboard.writeHTML(this.doc.body.innerHTML);win.webContents.paste();ipcRenderer.send('articleRefreshMain', {siteId: 'zhihu',url: window.location.href});}.bind(this), 800)}.bind(this), 800)

注意,如果要黏貼兩個地方,最好間隔個幾百毫秒

要不然網頁還沒反應過來,你就focus另一個地方了,會導致黏貼不成功。

開源說明

源碼地址:https://github.com/xland/xiangxuema(界面截屏也在這里)

支持平臺:win x64、mac x64、linux x64(打包編譯腳本都在)

編譯好的應用程序,我放到了阿里云的CDN里,下載速度超贊,大家可以下載來用用看

有什么問題,請不吝提交issue,有issue必回!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453648.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453648.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453648.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

180118 有趣的人工智能對話小程序

print(Hello world!) #輸入 print(What is your name?) # ask for their name 詢問名字 myName input()   #該你來回答名字了 print(It is good to meet you, myName)  #根據你的名字來給你打個招呼 print(The length of your name is:)  #然后看下一句 print(len(…

Linux 內核調試器 調試指南

Linux 內核調試器內幕 KDB 入門指南 Hariprasad Nellitheertha (nhariprain.ibm.com), 軟件工程師, IBM簡介: 調試內核問題時,能夠跟蹤內核執行情況并查看其內存和數據結構是非常有用的。Linux 中的內置內核調試器 KDB 提供了這種功能。在本文中您將了解…

學習API HOOK,編寫了一個winsock 的封包抓取程序,可免費使用;

開發環境是:windows 2000 delphi 7 監視API:recv,recvfrom,WSARecvEx,send,sendto,accept,bind,closesocket,connect socket 版本:wsock32.dll/*ws2_32.dll(暫時有兼容問題) 目前還不支持修改封包; 當前實現針對某個進程或多個選定進程的通…

fib函數用python編寫_Python中利用函數裝飾器實現備忘功能

“備忘”的定義“memoization”(備忘)這個詞是由Donald Michie在1968年提出的,它基于拉丁語單詞“memorandum”(備忘錄),意思是“被記住”。雖然它和單詞“memorization”在某種程度上有些相似,但它并不是該單詞的錯誤拼寫。實際上&#xff0…

MyBatis學習總結(二)——使用MyBatis對表執行CRUD操作

MyBatis學習總結(二)——使用MyBatis對表執行CRUD操作 上一篇博文MyBatis學習總結(一)——MyBatis快速入門中我們講了如何使用Mybatis查詢users表中的數據,算是對MyBatis有一個初步的入門了,今天講解一下如何使用MyBatis對users表執行CRUD操作。本文中使…

cifs mount 掛載共享目錄_安裝cifsutils解決linux掛載windows共享文件夾

1、安裝mount.cifs軟件包yum install cifs-utils -y如果是離線環境,請參考我的另一篇文章https://blog.csdn.net/qq_37119960/article/details/1083313732、開始掛載mount.cifs //192.168.1.110/share /usr/local/winshare -o useradministrator,pass123456參數說明…

JFinal框架

FJinal過濾器(tomcat) 創建java類繼承JFinalConfig 會實現六個方法(有一個是攔截器的方法好像是,那個我好像看的跟struts2一樣但是又沒看懂暫時不寫) Controller層的測試方法 Entity實體類 常用方法 查詢 增加 刪除 修改 轉載于:https://www.cnblogs.com/guanzhuang/p/8317949.…

掌握 Linux 調試技術 使用 GDB 調試 Linux 軟件

簡介: 您可以用各種方法來監控運行著的用戶空間程序:可以為其運行調試器并單步調試該程序,添加打印語句,或者添加工具來分析程序。本文描述了幾種可以用來調試在 Linux 上運行的程序的方法。我們將回顧四種調試問題的情況&#xf…

集合之二:迭代器

迭代器的簡單使用 在遍歷容器時,我們可以使用for循環或者是增強for循環,但是不同的集合結構在遍歷時,我們要針對集合特點采取不同的方式,比如List是鏈表,我們可以直接當做數組處理,但Map是Key—Value的形式…

簡單使用ansible-playbook

1.使用以下命令給客戶端安裝httpd服務: [rootserver ~]# ansible testhost -m yum -a "namehttpd" 192.168.77.128 | SUCCESS > {"changed": true, "msg": "", "rc": 0, "results": ["Loaded …

原則

昨天例會上,領導分享了他最近看過的一本書《原則》。試想,工作上,生活中我的原則是什么呢?關于技術學習的原則。一開始的時候,一般都是遇到不會的再去學習,我一直比較喜歡帶著問題,這樣會學習效…

Python內置函數簡記

一、數學運算類 abs(x)求絕對值 1、參數可以是整型,也可以是復數 2、若參數是復數,則返回復數的模complex([real[, imag]])創建一個復數divmod(a, b)分別取商和余數 注意:整型、浮點型都可以float([x])將一個字符串或數轉換為浮點數。如果無參…

開源Java反編譯工具

Java 反編譯器 1. JD-GUI JD-GUI 是一個用 C 開發的 Java 反編譯工具,由 Pavel Kouznetsov開發,支持Windows、Linux和蘋果Mac Os三個平臺。 而且提供了Eclipse平臺下的插件JD-Eclipse。JD-GUI不需要安裝,直接點擊運行,可以反編譯j…

基于MPI的H.264并行編碼代碼移植與優化

2010 03 25基于MPI的H.264并行編碼代碼移植與優化范 文洛陽理工學院計算機信息工程系 洛陽 471023摘 要 H.264獲得出色壓縮效果和質量的代價是壓縮編碼算法復雜度的增加。為了尋求更高的編碼速度,集群并行計算被運用到H.264的視頻編碼計算中。分析H.264可實現并行計…

python自動取款機程序_python ATM取款機----運維開發初學(上篇)

自動取款機基本功能:可以存取轉賬,刷卡信息查詢,銀行卡號歷史信息查詢,消費記錄查詢,修改密碼。思維導圖如下:數據庫設計:mysql> desc balan_list; #保存賬號交易記錄option_type-----------…

java的運行參數

貼個java的運行參數: Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select t…

阿里服務器+Centos7.4+Tomcat+JDK部署

適用對象 本文檔介紹如何使用一臺基本配置的云服務器 ECS 實例部署 Java web 項目。適用于剛開始使用阿里云進行建站的個人用戶。 配置要求 這里列出的軟件版本僅代表寫作本文檔使用的版本。操作時,請您以實際軟件版本為準。 操作系統:CentOS 7.4Tomcat …

php輸出mysqli查詢出來的結果

php連接mysql我有文章已經寫過了,這篇文章主要是介紹從mysql中查詢出結果之后怎么輸出的問題。 一:mysqli_fetch_row(); 查詢結果:array([0]>小王) 查詢: [php] view plaincopy while ($row mysqli_fetch_assoc($result)) …

rhel mysql安裝_RHEL6.4下MySQL安裝方法及簡單配置

1.MySQL安裝方法簡介 1.rpm包yum安裝 2.通用二進制包安裝 3.源碼編譯安裝 注意:實驗所采用的系統平臺為:RHEL6.4 2.rpm ins首頁 → 數據庫技術背景:閱讀新聞RHEL6.4下MySQL安裝方法及簡單配置[日期:2014-04-08]來源:Li…

H.264算法的DSP移植與優化

摘要:在TMS320DM643平臺上實現H.264基檔次編碼器的移植與優化顯得格外實用和必要。基于對DSP平臺的結構特性和H.264的計算復雜度分析,主要從核心算法、數據傳輸和存儲器/Cache使用幾方面對H.264編碼器進行了…