Chrome Serial API

Seite 2: Chrome-Apps

Inhaltsverzeichnis

Das Beispielprogramm integriert sich als Chrome-App im Browser.

Es wäre bequem, wenn man in regulären Webseiten per JavaScript auf die serielle Schnittstelle zugreifen könnte. Aus Sicherheitsgründen ist das aber nicht gestattet und so dürfen nur "echte" Chrome-Apps mit dem Arduino kommunizieren.

In der Praxis hat das keine großen Auswirkungen. Die meisten Mikrocontroller-Anwendungen dürften ohnehin sehr speziell sein und nicht die breite Masse an Web-Surfern ansprechen. Schließlich muss an der seriellen Schnittstelle ja ein Stückchen Hardware hängen, mit dem die Anwendung kommuniziert.

Für solche und ähnliche Anwendungszwecke hat Google die Chrome-Apps vorgesehen. Die ähneln den Chrome-Erweiterungen in vielerlei Hinsicht, unterscheiden sich aber in wichtigen Details. Extensions sind in erster Linie dafür gedacht, auf Inhalte von beliebigen Webseiten zu reagieren. Chrome-Apps, wie zum Beispiel Google Docs oder viele Browser-Spiele, funktionieren in der Regel auch dann, wenn der Browser offline ist.


Im Kern ist jede Chrome-App ein ZIP-Archiv, das neben der Implementierung der eigentlichen Anwendung eine Reihe von Standard-Dateien enthält. Während der Entwicklung muss man aber nicht nach jeder kleinen Änderung neue ZIP-Archive erstellen. Man kann die Anwendung im Chrome-Browser direkt aus dem Verzeichnis ausführen, in dem die Anwendungsdateien liegen. Dazu ruft man die URL chrome://extensions auf und klickt auf den "Load unpacked extension"-Button. Anschließend kann man mit den Links Reload, Launch und Restart die Anwendung erneut laden, starten und neu starten.


Eine zentrale Rolle spielt die Datei manifest.json. Sie legt die wichtigsten Eigenschaften der Web-Anwendung fest und wird in der JavaScript Object Notation (JSON) kodiert.

Für eine einfache Anwendung, die nur die "rohen" Daten von der seriellen Schnittstelle liest und ausgibt, sieht sie aus wie manifest.json.

{
"name": "Serial Sample",
"version": "1.0",
"manifest_version": 2,
"minimum_chrome_version": "23",
"description": "Shows how to control an Arduino Esplora using Chrome.",

"app": {
"background": {
"scripts": [ "background.js" ],
"persistent": false
}
},

"permissions": [ "serial" ]
}

Im Wesentlichen enthält manifest.json den Namen, die Version und eine Beschreibung der Anwendung. Auch die minimal benötigte Chrome-Version legt die Datei fest. Vor dem Hintergrund, das Anwendungen potenziell im Chrome Web Store veröffentlicht und sogar verkauft werden können, sind das wichtige Informationen.

Darüber hinaus spezifiziert manifest.json die Einstiegsdateien und Eigenschaften der Chrome-App:


"app": {
"background": {
"scripts": [ "background.js" ],
"persistent": false
}
}



Gemäß dieser Definition führt die Anwendung beim Start zuerst die Datei background.js aus. Zusätzlich legt die Definition fest, dass die Applikation eine Event Page ist. Event Pages laufen im Hintergrund und benötigen nicht unbedingt eine Schnittstelle nach außen. Sie können aber durchaus eine Benutzeroberfläche haben.

Das Anwendungsmodell dient in erster Linie dazu, Strom zu sparen, denn Event Pages werden je nach Bedarf vom Browser deaktiviert. Sie lösen daher die bisher verwendeten Background Pages ab. Im Code sieht man den Unterschied zwischen Background Pages und Event Pages nur am Wert des Attributs "persistent". Bei Event Pages ist er false und bei Background Pages ist er true.