Translations of this page:

We’re in the process of updating the documentation for Zotero 5.0. Some documentation may be outdated in the meantime. Thanks for your understanding.

Zotero has a built-in HTTP server designed to communicate with the Safari and Chrome extensions, called Connector. This HTTP server is enabled by default in Zotero Standalone and it can be enabled for Zotero in Firefox by setting extensions.zotero.httpServer.enabled to true in about:config. See the knowledge base article.

The connector server defines several endpoints by default, including:

  • /connector/savePage
  • /connector/saveItems
  • /connector/saveSnapshot
  • /connector/selectItems
  • /connector/getTranslatorCode
  • /connector/ping

These endpoints are implemented in server_connector.js. The server is implemented in server.js.

Extending the Connector Server

The following code registers an additional endpoint with the built-in connector HTTP server.

This script must be run with chrome privileges. The best way to do this is to create an extension that registers an XPCOM service to run at Firefox startup. Firefox 4 users also have the option of creating a bootstrapped extension. Alternatively, you could register the endpoint from a overlay or from a chrome URI that you load manually.

Once registered, going to http://127.0.0.1:23119/myAddon/helloWorld in a web browser should produce a page containing “Hello world.”

When the server receives a request for a given endpoint, it calls the init() method of the specified object, passing two arguments:

  • data - the query string (for a GET request) or POST data (for a POST request)
  • sendResponseCallback - a function to send a response to the HTTP request. This can be passed a response code alone (e.g., sendResponseCallback(404)) or a response code, MIME type, and response body (e.g., sendResponseCallback(200, “text/plain”, “Hello World!”))

The endpoint can also restrict supported methods and data types. Keep in mind that any webpage loaded in a browser can issue a GET request or POST application/x-www-urlencoded or text/plain encoded data to the integrated HTTP server, although cross-origin restrictions prevent webpages from reading the response.

var Zotero = Components.classes["@zotero.org/Zotero;1"]
	.getService(Components.interfaces.nsISupports)
	.wrappedJSObject;
 
/**
 * Hello world endpoint
 *
 * Accepts:
 *		Nothing
 * Returns:
 *		"Hello world" page
 */
var myEndpoint = Zotero.Server.Endpoints["/myAddon/helloWorld"] = function() {};
myEndpoint.prototype = {
	"supportedMethods":["GET"],
 
	/**
	 * Sends a fixed webpage
	 * @param {String} data POST data or GET query string
	 * @param {Function} sendResponseCallback function to send HTTP response
	 */
	"init":function(postData, sendResponseCallback) {
		sendResponseCallback(200, "text/html",
			'<!DOCTYPE html><html><head/><body>Hello world!</body></html>');
	}
}
dev/client_coding/connector_http_server.txt · Last modified: 2017/11/12 19:53 (external edit)