Package: nativemessaging-ng
nativemessaging-ngA Python package for interfacing with Native Messaging in WebExtensions. Based on the apparently unmaintained version ofRayquaza01, which is in turn based onNative Messaging on MDNandnative-messaging on mdn/webextension-examples.Native Messaging documentationNative Messaging on MDNNative Messaging on Chrome DocsInstallationpip install nativemessaging-ngUsageMethodsThenativemessagingmodule exposes following methods:log_browser_console(message)adds the given message to the browser log (accessible via ctrl-shift-J)get_message_raw()polls for a message from the browser and returns the result as string. Ifruntime.connectNativeis used,get_message()must be called repeatedly in a loop to poll for messages; ifruntime.sendNativeMessageis used,get_message()only needs to be called once.send_message_raw(message)sends the given string message to the browser.get_message()polls for a message from the browser and returns the message as a json structure.send_message(json_message)sends the given json structured message to the browser.install(browsers, manifest_filename)takes a list of browsers to install the manifest and a manifest filename, to install the given manifest in the browser configuration. Supported browsers are 'chrome' and 'firefox'.is_installed(application_name)returns the list of browsers for which the manifest of application_name is installed.uninstall(browsers, application_name)uninstalls the manifest of application_name for all given browsers.ExampleBrowser side:functiononReceived(response){console.log(response);}// runtime.connectNativevarport=browser.runtime.connectNative("application_name");port.onMessage.addListener(onReceived);port.postMessage("hello");// runtime.sendNativeMessagebrowser.runtime.sendNativeMessage("application_name","hello").then(onReceived);Python application side:importnativemessagingwhileTrue:message=nativemessaging.get_message()ifmessage=="hello":nativemessaging.send_message("world")nativemessaging-installnativemessaging-installis a command line script to install a manifest in the browser configuration.usage: nativemessaging-install [-h] [--version] [--manifest MANIFEST]
                               [--appname NAME]
                               {install,verify,uninstall} BROWSER
                               [BROWSER ...]

positional arguments:
  {install,verify,uninstall}
                        action to take, can be install, verify or uninstall
  BROWSER               browser(s) for which the manifest will be installed,
                        valid values are chrome or firefox.

options:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --manifest MANIFEST   path to the manifest file to install (default: native-
                        manifest.json)
  --appname NAME        application name to be verified or uninstalledManifest fileThe format of the manifest file must be similar to the native manifest format for Chrome or Firefox, with two main differences:pathmust be a relative path to the native app in relation to your current working directory.Bothallowed_extensionsandallowed_originsmust be in the manifest to work with both Chrome and Firefox.{"name":"application_name","description":"description","path":"application_name.py","type":"stdio","allowed_extensions":["extension@id"],"allowed_origins":["chrome-extension://extension-id"]}Installed filesWindows:<application_name>_firefox.jsonand<application_name>_chrome.jsonwill be created in<path>A batch file will also be created to run the python application on WindowsA registry key is created atHKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\<application_name>orHKEY_CURRENT_USER\Software\Mozilla\NativeMessagingHosts\<application_name>Linux:~/.config/google-chrome/NativeMessagingHosts/<application_name>.jsonor~/.mozilla/native-messaging-hosts/<application_name>.jsonwill be createdOS/X:~/Library/Application Support/Google/Chrome/NativeMessagingHosts/<application_name>.jsonor~/Library/Application Support/Mozilla/NativeMessagingHosts/<application_name>.jsonwill be created