@@ -26,20 +26,18 @@ Simple browser using Electron's [default session](https://www.electronjs.org/doc
2626
2727``` js
2828const { app , BrowserWindow } = require (' electron' )
29- const { ElectronChromeExtensions } = require (' electron-chrome-extensions' )(
30- (async function main () {
31- await app .whenReady ()
29+ const { ElectronChromeExtensions } = require (' electron-chrome-extensions' )
3230
33- const extensions = new ElectronChromeExtensions ()
34- const browserWindow = new BrowserWindow ()
31+ app .whenReady ().then (() => {
32+ const extensions = new ElectronChromeExtensions ()
33+ const browserWindow = new BrowserWindow ()
3534
36- // Adds the active tab of the browser
37- extensions .addTab (browserWindow .webContents , browserWindow)
35+ // Adds the active tab of the browser
36+ extensions .addTab (browserWindow .webContents , browserWindow)
3837
39- browserWindow .loadURL (' https://samuelmaddock.com' )
40- browserWindow .show ()
41- })(),
42- )
38+ browserWindow .loadURL (' https://samuelmaddock.com' )
39+ browserWindow .show ()
40+ })
4341```
4442
4543### Advanced
@@ -50,45 +48,68 @@ Multi-tab browser with full support for Chrome extension APIs.
5048
5149``` js
5250const { app , session , BrowserWindow } = require (' electron' )
53- const { ElectronChromeExtensions } = require (' electron-chrome-extensions' )(
54- (async function main () {
55- await app .whenReady ()
51+ const { ElectronChromeExtensions } = require (' electron-chrome-extensions' )
52+
53+ app .whenReady ().then (() => {
54+ const browserSession = session .fromPartition (' persist:custom' )
55+
56+ const extensions = new ElectronChromeExtensions ({
57+ session: browserSession,
58+ createTab (details ) {
59+ // Optionally implemented for chrome.tabs.create support
60+ },
61+ selectTab (tab , browserWindow ) {
62+ // Optionally implemented for chrome.tabs.update support
63+ },
64+ removeTab (tab , browserWindow ) {
65+ // Optionally implemented for chrome.tabs.remove support
66+ },
67+ createWindow (details ) {
68+ // Optionally implemented for chrome.windows.create support
69+ },
70+ })
71+
72+ const browserWindow = new BrowserWindow ({
73+ webPreferences: {
74+ // Same session given to Extensions class
75+ session: browserSession,
76+ // Recommended options for loading remote content
77+ sandbox: true ,
78+ contextIsolation: true ,
79+ },
80+ })
5681
57- const browserSession = session .fromPartition (' persist:custom' )
82+ // Adds the active tab of the browser
83+ extensions .addTab (browserWindow .webContents , browserWindow)
5884
59- const extensions = new ElectronChromeExtensions ({
60- session: browserSession,
61- createTab (details ) {
62- // Optionally implemented for chrome.tabs.create support
63- },
64- selectTab (tab , browserWindow ) {
65- // Optionally implemented for chrome.tabs.update support
66- },
67- removeTab (tab , browserWindow ) {
68- // Optionally implemented for chrome.tabs.remove support
69- },
70- createWindow (details ) {
71- // Optionally implemented for chrome.windows.create support
72- },
73- })
74-
75- const browserWindow = new BrowserWindow ({
76- webPreferences: {
77- // Same session given to Extensions class
78- session: browserSession,
79- // Recommended options for loading remote content
80- sandbox: true ,
81- contextIsolation: true ,
82- },
83- })
84-
85- // Adds the active tab of the browser
86- extensions .addTab (browserWindow .webContents , browserWindow)
87-
88- browserWindow .loadURL (' https://samuelmaddock.com' )
89- browserWindow .show ()
90- })(),
91- )
85+ browserWindow .loadURL (' https://samuelmaddock.com' )
86+ browserWindow .show ()
87+ })
88+ ```
89+
90+ ### Including the preload script
91+
92+ This module requires including its preload script. Be sure to copy it next to your app's entry
93+ point script so it works in your packaged app.
94+
95+ ``` js
96+ const fs = require (' node:fs' )
97+ const path = require (' node:path' )
98+
99+ const preloadPath = require .resolve (' electron-chrome-extensions/preload' )
100+ const buildPath = ' ./path/to/entry/point'
101+
102+ fs .cp (preloadPath, path .join (buildPath, path .basename (preloadPath)))
103+ ```
104+
105+ For bundlers, 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 ) .
106+
107+ The ` modulePath ` option can be used for loading the preload from elsewhere.
108+
109+ ``` js
110+ new ElectronChromeExtensions ({
111+ modulePath: path .resolve (' ./out' , ' node_modules' , ' electron-chrome-extensions' ),
112+ })
92113```
93114
94115## API
@@ -221,7 +242,7 @@ To enable the element on a webpage, you must define a preload script which injec
221242Inject the browserAction API to make the ` <browser-action-list> ` element accessible in your application.
222243
223244``` js
224- import { injectBrowserAction } from ' electron-chrome-extensions/dist/ browser-action'
245+ import { injectBrowserAction } from ' electron-chrome-extensions/browser-action'
225246
226247// Inject <browser-action-list> element into our page
227248if (location .href === ' webui://browser-chrome.html' ) {
0 commit comments