webextension-rpc
This module provides a Remote Procedure Call abstraction around the message passing that is available to WebExtension (browser extension) scripts. It makes it easier to call a function in the background script from a tab’s content script, or vice versa.
Example use
In background.js
:
function myFunc(arg) {
return arg * 2
}
makeRemotelyCallable({ myFunc })
In content_script.js
:
const myRemoteFunc = remoteFunction('myFunc')
myRemoteFunc(21).then(result => { ... result is 42! ... })
Note that the remote function always returns a Promise
, which resolves with the remote function’s
actual return value (if the return value is itself a Promise, its result is awaited too).
Install
Using NPM
This module is published on npm.
Run npm install webextension-rpc
or equivalent.
Standalone
Try one of the magic npm bundlers, for example:
wget https://wzrd.in/standalone/webextension-rpc -O webextension-rpc.js
API
remoteFunction(functionName, { tabId })
Create a proxy function that invokes the specified remote function.
functionName
(string, required): name of the function as registered on the remote side.options
(object, optional):tabId
(number): The id of the tab whose content script is the remote side. Leave undefined to call the background script (from a content script).
makeRemotelyCallable(functions, { insertExtraArg })
Register one or more functions to enable remote scripts to call them. Arguments:
functions
(object, required): An object with a{ functionName: function }
mapping. Each function will be remotely callable using the given name.options
(object, optional):insertExtraArg
(boolean, default isfalse
): If truthy, each executed function also receives, as its first argument before the arguments it was invoked with, a Tab object, which contains the details of the tab that sent the message.