Событие <Electron>session.will-download сработало более одного раза - PullRequest
0 голосов
/ 16 мая 2019

Я использую электрон с событием session.will-download и столкнулся с проблемой.

Я встраиваю сеть в <webview>, и внутри сети есть ссылка для скачивания, я скачаю файл PDF, яПопытка загрузить PDF с определенным каталогом, это вызовет will-download.это прекрасно, но когда я нажимаю больше раз, я обнаружил, что на самом деле это срабатывает не только один раз.

mainWindow = new BrowserWindow({ width: 1100, height: 680 })
    mainWindow.loadURL(isDev ? 'http://localhost:3000' : `file://${path.join(__dirname, '../build/index.html')}`)
    mainWindow.on('closed', () => (mainWindow = null))

    mainWindow.webContents.on('did-attach-webview', (event, webContents) => {
        console.log('did-attach-webview emmit')
        webContents.on('new-window', (event, url) => {
            console.log(' ------ new-window .. -----')
            event.preventDefault()

            const win = new BrowserWindow({ show: false })
            win.once('ready-to-show', () => win.show())
            win.loadURL(url)
            event.newGuest = win

            const session = win.webContents.session
            session.on('will-download', (event, item, webContents) => {
                console.log(`${url} will-download ...`)
                const saveFileName = item.getFilename()
                item.setSavePath(`/Users/yang/Desktop/electron_practice/electron-react/src/${saveFileName}`)
            })
        })
    })

Ниже приведен журнал, который я печатаю

[1]  ------ new-window .. -----
[1] Blocked http://alp-rfb6-hjap01.alp.com.tw:30000/core/Default.html from calling focus on its opener.
[1] http://alp-rfb6-hjdb01/ReportServer?%2fB6_Waybill_C&rs:Command=Render&rs:Format=PDF&wh_id=RF-B6-2&order_number=DY01190503024 will-download ...
[1]  ------ new-window .. -----
[1] Blocked http://alp-rfb6-hjap01.alp.com.tw:30000/core/Default.html from calling focus on its opener.
[1] http://alp-rfb6-hjdb01/ReportServer?%2fB6_Waybill_C&rs:Command=Render&rs:Format=PDF&wh_id=RF-B6-2&order_number=DY01190503024 will-download ...
[1] http://alp-rfb6-hjdb01/ReportServer?%2fB6_Waybill_C&rs:Command=Render&rs:Format=PDF&wh_id=RF-B6-2&order_number=DY01190503024 will-download ...
[1]  ------ new-window .. -----
[1] Blocked http://alp-rfb6-hjap01.alp.com.tw:30000/core/Default.html from calling focus on its opener.
[1] http://alp-rfb6-hjdb01/ReportServer?%2fB6_Waybill_C&rs:Command=Render&rs:Format=PDF&wh_id=RF-B6-2&order_number=DY01190503024 will-download ...
[1] http://alp-rfb6-hjdb01/ReportServer?%2fB6_Waybill_C&rs:Command=Render&rs:Format=PDF&wh_id=RF-B6-2&order_number=DY01190503024 will-download ...
[1] http://alp-rfb6-hjdb01/ReportServer?%2fB6_Waybill_C&rs:Command=Render&rs:Format=PDF&wh_id=RF-B6-2&order_number=DY01190503024 will-download ...
[1]  ------ new-window .. -----
[1] Blocked http://alp-rfb6-hjap01.alp.com.tw:30000/core/Default.html from calling focus on its opener.
[1] http://alp-rfb6-hjdb01/ReportServer?%2fB6_Waybill_C&rs:Command=Render&rs:Format=PDF&wh_id=RF-B6-2&order_number=DY01190503024 will-download ...
[1] http://alp-rfb6-hjdb01/ReportServer?%2fB6_Waybill_C&rs:Command=Render&rs:Format=PDF&wh_id=RF-B6-2&order_number=DY01190503024 will-download ...
[1] http://alp-rfb6-hjdb01/ReportServer?%2fB6_Waybill_C&rs:Command=Render&rs:Format=PDF&wh_id=RF-B6-2&order_number=DY01190503024 will-download ...
[1] http://alp-rfb6-hjdb01/ReportServer?%2fB6_Waybill_C&rs:Command=Render&rs:Format=PDF&wh_id=RF-B6-2&order_number=DY01190503024 will-download ...

Я полагаю, что проблема возникает в сеансе, она должна быть закрыта после завершения загрузки или что-то еще.Там кто-нибудь тоже сталкивается с проблемой: (* ​​1012 *

1 Ответ

0 голосов
/ 20 мая 2019

попробуйте закрыть окно, как только загрузка будет завершена, проблема с несколькими обработчиками загрузки сеанса будет зарегистрирована.Я думаю, что закрытие окна после загрузки может помочь.Пожалуйста, попробуйте и дайте мне знать.

mainWindow = new BrowserWindow({ width: 1100, height: 680 })
    mainWindow.loadURL(isDev ? 'http://localhost:3000' : `file://${path.join(__dirname, '../build/index.html')}`)
    mainWindow.on('closed', () => (mainWindow = null))

    mainWindow.webContents.on('did-attach-webview', (event, webContents) => {
        console.log('did-attach-webview emmit')
        webContents.on('new-window', (event, url) => {
            console.log(' ------ new-window .. -----')
            event.preventDefault()

            const win = new BrowserWindow({ show: false })
            win.once('ready-to-show', () => win.show())
            win.loadURL(url)
            event.newGuest = win

            const session = win.webContents.session
            session.on('will-download', (event, item, webContents) => {
                console.log(`${url} will-download ...`)
                const saveFileName = item.getFilename()
                item.setSavePath(`/Users/yang/Desktop/electron_practice/electron-react/src/${saveFileName}`)

            item.once('done', (event, state) => {
             if (state === 'completed') {
              win.close();
             } else {
              win.close();
             }
            })
            })
        })
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...