Skip to content

Native Messaging Host Protocol for Browser Extensions

License

Notifications You must be signed in to change notification settings

simov/native-messaging

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

native-messaging

npm-version

Native Messaging Host Protocol for Browser Extensions (Chrome, Firefox)

API

#!/home/s/.nvm/versions/node/v8.11.2/bin/node

// Might be good to use an explicit path to node on the shebang line
// in case it isn't in PATH when launched by Chrome/Firefox

var sendMessage = require('native-messaging')(handleMessage)

function handleMessage (req) {
  if (req.message === 'ping') {
    sendMessage({message: 'pong', body: 'hello from nodejs app'})
  }
}

Tips

  • chrome.runtime.connectNative returns a Port that can be used to establish persistent connection between the browser and the native app
  • the Port's disconnect method can be used to disconnect from the native app
  • the native app can use the OS's machinery to kill its own process at any time
  • chrome.runtime.sendNativeMessage can be used to send single message to the native app, useful with non persistent background pages
  • single native app can communicate with multiple browser extensions
  • single browser extension can communicate with multiple native apps

Things to look for

  1. Add nativeMessaging permission to the manifest.json file of your extension
  2. Load the extension to get its ID generated
  3. Put the native.messaging.example.json in ~/.config/google-chrome/NativeMessagingHosts/ or ~/.mozilla/native-messaging-hosts/
  • The name of the file should be identical to the name field specified in that file
  • Only dots . are allowed as delimiters in the file name
  • The path key should be absolute path to your nodejs script example.js
  • Chrome - the allowed_origins key should contain the extension's ID loaded in step 2
  • Firefox - the allowed_extensions key should contain the extension's ID specified in its manifest.json file
  1. Make sure that example.js is executable chmod 755
  2. Make sure nodejs is reachable from the shebang line in example.js
  3. Use the name specified in native.messaging.example.json to connect to the native app from the extension's background page background.js

Note that the install location for the native.messaging.example.json differs for each OS and browser. In case you plan to support multiple platforms, it's best to use install script. Here is an example of such script.

References

Topic Chrome Firefox
Native Messaging Host Protocol link link
chrome.runtime.connectNative link link
Port link link
chrome.runtime.sendNativeMessage link link
host.json location link link
official example link link