0.1.1 • Published 4 years ago

@joe_kerr/electron-context-bridge v0.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

Electron plugin for an isolated preload script

Run code in Electron's Main World (renderer) that is isolated, as much as possible, from the Preload Isolated World. This is achieved by using a context bridge. An Electron context bridge is required for security purposes.

The current version has some open points on the todo list. Interfaces may change.

Install

npm install @joe_kerr/electron-context-bridge

Usage

const {ContextBridgeMain} = require("@joe_kerr/electron-context-bridge");
const contextBridge = new ContextBridgeMain(BrowserWindow);
//  (...)
const win = new BrowserWindow({
   webPreferences: {
    preload: contextBridge.getPreloadFilePath(),
    nodeIntegration: false,			
    contextIsolation: true //*required!
  }
});

Two types of communication are implemented:

  • Renderer-Main request-response model
  • Main broadcast

Request-response

//Main: Setup message channel
contextBridge.createIpcChannel("getPrinters", async (filterList)=>{
  const printers = browserWindow.webContents.getPrinters();	
  return filter(printers, filterList);
});	
//Renderer: send request to main and get response
async function doSth() {
  const result = await window.$electron.request("getPrinters", optionalEgAFilterList);
}

Broadcast

//Renderer: listen for message event
window.$electron.on("broadcast-event", function(event) {
  console.log(event.detail); //"broadcast-message"
  document.getElementById("response").textContent = event.detail;
});
//Main: send message event
contextBridge.broadcastMessage("broadcast-event", {data: "broadcast-message"});

Versions

0.1.1

  • Fix: Removed full exposure of ipcRenderer in Preload

0.1.0

  • Chg: Code cleanup and refactoring

Breaking changes

  • Chg: Removed todo code for parameter validation. Requirements too diverse, user responsibility

0.0.1

  • Public beta release.

Copyright

MIT (c) Joe Kerr since 2020