Shell for Chrome and Firefox – WebExtensions
WebExtension API to execute external commands through native messaging.
// Environment variables
switch (true) {
case (typeof browser !== 'undefined'):
var PLATFORM = 'firefox'
var SHELL_EXTENSION_ID = 'shell@alexherbo2.github.com'
break
case (typeof chrome !== 'undefined'):
var PLATFORM = 'chrome'
var SHELL_EXTENSION_ID = 'ohgecdnlcckpfnhjepfdcdgcfgebkdgl'
break
}
// Initialization
const shell = {}
shell.port = chrome.runtime.connect(SHELL_EXTENSION_ID)
shell.send = (command, ...arguments) => {
shell.port.postMessage({ command, arguments })
}
// Usage
shell.send('mpv', 'https://youtu.be/7ky_itVPTnk')
const ping = () => {
shell.port.postMessage({
id: 'ping-pong',
command: 'echo',
arguments: ['Ping']
})
}
shell.port.onMessage.addListener((response) => {
switch (response.id) {
case 'ping-pong':
console.log(response.output, 'Pong')
break
}
})
// Ping-pong
ping()
You can find some examples in Krabby.
See the source for a complete reference.
{
id: String?,
command: String,
arguments: Array(String)?,
environment: Hash(String, String)?,
shell: { type: Bool, default: false },
input: String?,
directory: String?
}
{
id: String?,
status: Int32,
output: String,
error: String
}