鍍金池/ 問答/HTML/ Electron如何截獲頁面下載事件?

Electron如何截獲頁面下載事件?

Electron默認(rèn)的下載事件不支持?jǐn)帱c下載,我想截獲后調(diào)用自己的下載函數(shù),下載函數(shù)已經(jīng)寫好,現(xiàn)在問題主要是要截獲頁面的下載事件(html頁面不是自己寫的),有沒有懂的大神賜教下

回答
編輯回答
筱饞貓

我前段時間正好寫過electron的下載,正常的electron實現(xiàn)下載是怎樣的呢?
先要說下electron的ipc通信,ipcMain,ipcRenderer
electron內(nèi)主進(jìn)程和渲染進(jìn)程是通過ipc通信的
主進(jìn)程(main.js)定義 監(jiān)控 函數(shù)

ipcMain.on('download', (evt, args) => {
    let url = JSON.parse(args);
    downloadUrl = url.downloadUrl;
    saveUrl = url.saveUrl;
    mainWindow.webContents.downloadURL(downloadUrl);
});

渲染進(jìn)程(頁面)調(diào)用ipcRenderer來觸發(fā)

ipcRenderer.send('download', JSON.stringify({
    downloadUrl: `${ipURL()}${url}`,
    saveUrl: result[0]
}));

這樣就可以觸發(fā)主進(jìn)程的下載動作,至于下載動作是怎樣的我就不寫了,官方上都有,
如果向阻止electron只要把main.js里的

ipcMain.on('download', (evt, args) => {
    let url = JSON.parse(args);
    downloadUrl = url.downloadUrl;
    saveUrl = url.saveUrl;
    //mainWindow.webContents.downloadURL(downloadUrl);
});

注釋掉就行了

當(dāng)然每個人的寫法可能不一樣,但是都是通過ipc從渲染進(jìn)程發(fā)送給主進(jìn)程的,找到主進(jìn)程里開始下載的動作,關(guān)掉就可以了

2017年10月25日 14:04
編輯回答
怣人

文件下載是瀏覽器的動作,這一部分并不會和js進(jìn)行交互

2017年12月30日 01:21
編輯回答
風(fēng)畔

問題解決了,當(dāng)頁面執(zhí)行下載操作的時候Electron的webContents.downloadURL(url)會被自動調(diào)用,session 的 will-download 事件會觸發(fā), 只要監(jiān)聽session 的 will-download 事件,然后調(diào)用event.preventDefault()阻止調(diào)用系統(tǒng)的默認(rèn)下載,之后調(diào)用自己的下載函數(shù)就可以了,謝謝大家了
mainWindow.webContents.session.on('will-download',(event,item,webContents)=>{

    event.preventDefault();
    //console.log('will-download'+item.getURL());
    //執(zhí)行自己的下載操作
    MyDownLoad(item.getURL());
});
2017年3月29日 21:51