|
@@ -98,7 +98,7 @@ Emitted when Electron is about to download `item` in `webContents`.
|
|
|
Calling `event.preventDefault()` will cancel the download and `item` will not be
|
|
|
available from next tick of the process.
|
|
|
|
|
|
-```javascript
|
|
|
+```javascript @ts-expect-error=[4]
|
|
|
const { session } = require('electron')
|
|
|
session.defaultSession.on('will-download', (event, item, webContents) => {
|
|
|
event.preventDefault()
|
|
@@ -214,7 +214,7 @@ cancel the request. Additionally, permissioning on `navigator.hid` can
|
|
|
be further managed by using [`ses.setPermissionCheckHandler(handler)`](#sessetpermissioncheckhandlerhandler)
|
|
|
and [`ses.setDevicePermissionHandler(handler)`](#sessetdevicepermissionhandlerhandler).
|
|
|
|
|
|
-```javascript
|
|
|
+```javascript @ts-type={fetchGrantedDevices:()=>(Array<Electron.DevicePermissionHandlerHandlerDetails['device']>)}
|
|
|
const { app, BrowserWindow } = require('electron')
|
|
|
|
|
|
let win = null
|
|
@@ -253,7 +253,7 @@ app.whenReady().then(() => {
|
|
|
win.webContents.session.on('select-hid-device', (event, details, callback) => {
|
|
|
event.preventDefault()
|
|
|
const selectedDevice = details.deviceList.find((device) => {
|
|
|
- return device.vendorId === '9025' && device.productId === '67'
|
|
|
+ return device.vendorId === 9025 && device.productId === 67
|
|
|
})
|
|
|
callback(selectedDevice?.deviceId)
|
|
|
})
|
|
@@ -320,7 +320,7 @@ cancel the request. Additionally, permissioning on `navigator.serial` can
|
|
|
be managed by using [ses.setPermissionCheckHandler(handler)](#sessetpermissioncheckhandlerhandler)
|
|
|
with the `serial` permission.
|
|
|
|
|
|
-```javascript
|
|
|
+```javascript @ts-type={fetchGrantedDevices:()=>(Array<Electron.DevicePermissionHandlerHandlerDetails['device']>)}
|
|
|
const { app, BrowserWindow } = require('electron')
|
|
|
|
|
|
let win = null
|
|
@@ -463,7 +463,7 @@ cancel the request. Additionally, permissioning on `navigator.usb` can
|
|
|
be further managed by using [`ses.setPermissionCheckHandler(handler)`](#sessetpermissioncheckhandlerhandler)
|
|
|
and [`ses.setDevicePermissionHandler(handler)`](#sessetdevicepermissionhandlerhandler).
|
|
|
|
|
|
-```javascript
|
|
|
+```javascript @ts-type={fetchGrantedDevices:()=>(Array<Electron.DevicePermissionHandlerHandlerDetails['device']>)} @ts-type={updateGrantedDevices:(devices:Array<Electron.DevicePermissionHandlerHandlerDetails['device']>)=>void}
|
|
|
const { app, BrowserWindow } = require('electron')
|
|
|
|
|
|
let win = null
|
|
@@ -502,7 +502,7 @@ app.whenReady().then(() => {
|
|
|
win.webContents.session.on('select-usb-device', (event, details, callback) => {
|
|
|
event.preventDefault()
|
|
|
const selectedDevice = details.deviceList.find((device) => {
|
|
|
- return device.vendorId === '9025' && device.productId === '67'
|
|
|
+ return device.vendorId === 9025 && device.productId === 67
|
|
|
})
|
|
|
if (selectedDevice) {
|
|
|
// Optionally, add this to the persisted devices (updateGrantedDevices needs to be implemented by developer to persist permissions)
|
|
@@ -755,15 +755,17 @@ Sets download saving directory. By default, the download directory will be the
|
|
|
Emulates network with the given configuration for the `session`.
|
|
|
|
|
|
```javascript
|
|
|
+const win = new BrowserWindow()
|
|
|
+
|
|
|
// To emulate a GPRS connection with 50kbps throughput and 500 ms latency.
|
|
|
-window.webContents.session.enableNetworkEmulation({
|
|
|
+win.webContents.session.enableNetworkEmulation({
|
|
|
latency: 500,
|
|
|
downloadThroughput: 6400,
|
|
|
uploadThroughput: 6400
|
|
|
})
|
|
|
|
|
|
// To emulate a network outage.
|
|
|
-window.webContents.session.enableNetworkEmulation({ offline: true })
|
|
|
+win.webContents.session.enableNetworkEmulation({ offline: true })
|
|
|
```
|
|
|
|
|
|
#### `ses.preconnect(options)`
|
|
@@ -1036,7 +1038,7 @@ Additionally, the default behavior of Electron is to store granted device permis
|
|
|
If longer term storage is needed, a developer can store granted device
|
|
|
permissions (eg when handling the `select-hid-device` event) and then read from that storage with `setDevicePermissionHandler`.
|
|
|
|
|
|
-```javascript
|
|
|
+```javascript @ts-type={fetchGrantedDevices:()=>(Array<Electron.DevicePermissionHandlerHandlerDetails['device']>)}
|
|
|
const { app, BrowserWindow } = require('electron')
|
|
|
|
|
|
let win = null
|
|
@@ -1084,9 +1086,9 @@ app.whenReady().then(() => {
|
|
|
win.webContents.session.on('select-hid-device', (event, details, callback) => {
|
|
|
event.preventDefault()
|
|
|
const selectedDevice = details.deviceList.find((device) => {
|
|
|
- return device.vendorId === '9025' && device.productId === '67'
|
|
|
+ return device.vendorId === 9025 && device.productId === 67
|
|
|
})
|
|
|
- callback(selectedPort?.deviceId)
|
|
|
+ callback(selectedDevice?.deviceId)
|
|
|
})
|
|
|
})
|
|
|
```
|
|
@@ -1174,31 +1176,31 @@ macOS does not require a handler because macOS handles the pairing
|
|
|
automatically. To clear the handler, call `setBluetoothPairingHandler(null)`.
|
|
|
|
|
|
```javascript
|
|
|
-
|
|
|
-const { app, BrowserWindow, ipcMain, session } = require('electron')
|
|
|
-
|
|
|
-let bluetoothPinCallback = null
|
|
|
+const { app, BrowserWindow, session } = require('electron')
|
|
|
+const path = require('path')
|
|
|
|
|
|
function createWindow () {
|
|
|
+ let bluetoothPinCallback = null
|
|
|
+
|
|
|
const mainWindow = new BrowserWindow({
|
|
|
webPreferences: {
|
|
|
preload: path.join(__dirname, 'preload.js')
|
|
|
}
|
|
|
})
|
|
|
-}
|
|
|
|
|
|
-// Listen for an IPC message from the renderer to get the response for the Bluetooth pairing.
|
|
|
-ipcMain.on('bluetooth-pairing-response', (event, response) => {
|
|
|
- bluetoothPinCallback(response)
|
|
|
-})
|
|
|
+ mainWindow.webContents.session.setBluetoothPairingHandler((details, callback) => {
|
|
|
+ bluetoothPinCallback = callback
|
|
|
+ // Send a IPC message to the renderer to prompt the user to confirm the pairing.
|
|
|
+ // Note that this will require logic in the renderer to handle this message and
|
|
|
+ // display a prompt to the user.
|
|
|
+ mainWindow.webContents.send('bluetooth-pairing-request', details)
|
|
|
+ })
|
|
|
|
|
|
-mainWindow.webContents.session.setBluetoothPairingHandler((details, callback) => {
|
|
|
- bluetoothPinCallback = callback
|
|
|
- // Send a IPC message to the renderer to prompt the user to confirm the pairing.
|
|
|
- // Note that this will require logic in the renderer to handle this message and
|
|
|
- // display a prompt to the user.
|
|
|
- mainWindow.webContents.send('bluetooth-pairing-request', details)
|
|
|
-})
|
|
|
+ // Listen for an IPC message from the renderer to get the response for the Bluetooth pairing.
|
|
|
+ mainWindow.webContents.ipc.on('bluetooth-pairing-response', (event, response) => {
|
|
|
+ bluetoothPinCallback(response)
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
app.whenReady().then(() => {
|
|
|
createWindow()
|