144 lines
5.1 KiB
Markdown
144 lines
5.1 KiB
Markdown
# electron-chrome-web-store
|
|
|
|
Install and update Chrome extensions from the Chrome Web Store for Electron.
|
|
|
|
## Usage
|
|
|
|
```
|
|
npm install electron-chrome-web-store
|
|
```
|
|
|
|
> [!TIP]
|
|
> To enable full support for Chrome extensions in Electron, install [electron-chrome-extensions](https://www.npmjs.com/package/electron-chrome-extensions).
|
|
|
|
### Enable downloading extensions from the Chrome Web Store
|
|
|
|
```js
|
|
const { app, BrowserWindow, session } = require('electron')
|
|
const { installChromeWebStore } = require('electron-chrome-web-store')
|
|
|
|
app.whenReady().then(async () => {
|
|
const browserSession = session.defaultSession
|
|
const browserWindow = new BrowserWindow({
|
|
webPreferences: {
|
|
session: browserSession,
|
|
},
|
|
})
|
|
|
|
// Install Chrome web store and wait for extensions to load
|
|
await installChromeWebStore({ session: browserSession })
|
|
|
|
browserWindow.loadURL('https://chromewebstore.google.com/')
|
|
})
|
|
```
|
|
|
|
### Install and update extensions programmatically
|
|
|
|
```js
|
|
const { app, session } = require('electron')
|
|
const { installExtension, updateExtensions } = require('electron-chrome-web-store')
|
|
|
|
app.whenReady().then(async () => {
|
|
// Install Dark Reader
|
|
await installExtension('eimadpbcbfnmbkopoojfekhnkhdbieeh')
|
|
|
|
// Install React Developer Tools with file:// access
|
|
await installExtension('fmkadmapgofadopljbjfkapdkoienihi', {
|
|
loadExtensionOptions: { allowFileAccess: true },
|
|
})
|
|
|
|
// Install uBlock Origin Lite to custom session
|
|
await installExtension('ddkjiahejlhfcafbddmgiahcphecmpfh', {
|
|
session: session.fromPartition('persist:browser'),
|
|
})
|
|
|
|
// Check and install updates for all loaded extensions
|
|
await updateExtensions()
|
|
})
|
|
```
|
|
|
|
### Packaging the preload script
|
|
|
|
This module uses a [preload script](https://www.electronjs.org/docs/latest/tutorial/tutorial-preload#what-is-a-preload-script).
|
|
When packaging your application, it's required that the preload script is included. This can be
|
|
handled in two ways:
|
|
|
|
1. Include `node_modules` in your packaged app. This allows `electron-chrome-web-store/preload` to
|
|
be resolved.
|
|
2. In the case of using JavaScript bundlers, you may need to copy the preload script next to your
|
|
app's entry point script. You can try using
|
|
[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin),
|
|
[vite-plugin-static-copy](https://github.com/sapphi-red/vite-plugin-static-copy),
|
|
or [rollup-plugin-copy](https://github.com/vladshcherbin/rollup-plugin-copy) depending on your app's
|
|
configuration.
|
|
|
|
Here's an example for webpack configurations:
|
|
|
|
```js
|
|
module.exports = {
|
|
entry: './index.js',
|
|
plugins: [
|
|
new CopyWebpackPlugin({
|
|
patterns: [require.resolve('electron-chrome-web-store/preload')],
|
|
}),
|
|
],
|
|
}
|
|
```
|
|
|
|
## API
|
|
|
|
### `installChromeWebStore`
|
|
|
|
Installs Chrome Web Store support in the specified session.
|
|
|
|
- `options`
|
|
- `session`: The Electron session to enable the Chrome Web Store in. Defaults to `session.defaultSession`.
|
|
- `extensionsPath`: The path to the extensions directory. Defaults to 'Extensions/' in the app's userData path.
|
|
- `autoUpdate`: Whether to auto-update web store extensions at startup and once every 5 hours. Defaults to true.
|
|
- `loadExtensions`: A boolean indicating whether to load extensions installed by Chrome Web Store. Defaults to true.
|
|
- `allowUnpackedExtensions`: A boolean indicating whether to allow loading unpacked extensions. Only loads if `loadExtensions` is also enabled. Defaults to false.
|
|
- `allowlist`: An array of allowed extension IDs to install.
|
|
- `denylist`: An array of denied extension IDs to install.
|
|
- `beforeInstall`: A function which receives install details and returns a promise. Allows for prompting prior to install.
|
|
|
|
### `installExtension`
|
|
|
|
Installs Chrome extension from the Chrome Web Store.
|
|
|
|
- `extensionId`: The Chrome Web Store extension ID to install.
|
|
- `options`
|
|
- `session`: The Electron session to load extensions in. Defaults to `session.defaultSession`.
|
|
- `extensionsPath`: The path to the extensions directory. Defaults to 'Extensions/' in the app's userData path.
|
|
- `loadExtensionOptions`: Extension options passed into `session.extensions.loadExtension`.
|
|
|
|
### `uninstallExtension`
|
|
|
|
Uninstalls Chrome Web Store extension.
|
|
|
|
- `extensionId`: The Chrome Web Store extension ID to uninstall.
|
|
- `options`
|
|
- `session`: The Electron session where extensions are loaded. Defaults to `session.defaultSession`.
|
|
- `extensionsPath`: The path to the extensions directory. Defaults to 'Extensions/' in the app's userData path.
|
|
|
|
### `updateExtensions`
|
|
|
|
Checks loaded extensions for updates and installs any if available.
|
|
|
|
- `session`: The Electron session to load extensions in. Defaults to `session.defaultSession`.
|
|
|
|
### `loadAllExtensions`
|
|
|
|
Loads all extensions from the specified directory.
|
|
|
|
- `session`: The Electron session to load extensions in.
|
|
- `extensionsPath`: The path to the directory containing the extensions.
|
|
- `options`: An object with the following property:
|
|
- `allowUnpacked`: A boolean indicating whether to allow loading unpacked extensions. Defaults to false.
|
|
|
|
> [!NOTE]
|
|
> The `installChromeWebStore` API will automatically load web store extensions by default.
|
|
|
|
## License
|
|
|
|
MIT
|