[dss-developer] dSS Script Laufzeit-Umgebung?

Sebastian Scholz digitalstrom at sunshine-studios.org
Sat Apr 30 11:50:14 CEST 2011


Hallo Dieter

> Lässt sich kurz umreissen, ob/wie sich die Laufzeitumgebung für js-Scripts zwischen dem dSS und einem Browser unterscheiden?
> Oder anders, gibt es Einschränkungen, bzw. Voraussetzungen, dass gegebener Code auf dem dSS laufen kann?

Soweit ich weiss, kann man auf dem dSS nur "reines" JavaScript
ausführen. Also JavaScript ohne browserspezifischen Erweiterungen und
ohne Zugriff auf das DOM. Den Sprachstandard gibt es in [1] und in
verständlicher Form auch in [2]. Zusätzlich dazu bietet der dSS noch die
digitalSTROM-spezifischen Erweiterungen (Logger, Event, ...).


> Konkreter:
> Ziel ist, einen HTTP Get-Request auf einen Server ausserhalb des dSS abzusetzen.
> 
> Nach meinem (limitierten) Verständnis einfachste Methode wäre zum Beispiel:
> 
> 	request = new XMLHttpRequest();
> 	request.open('GET', 'http://192.168.111.56:82/home/dss_callback.php?msg=yes');
> 	request.send(null);
> 
> Dieser Code in eine Webseite eingebaut funktioniert. 
> Die URL vom dSS aus per wget abgeschickt, funktioniert auch (es gibt also kein Netzwerkproblem).
> 
> Bloss in myapp.js eingebaut:
> 
> var LOGFILE_NAME = "myapp.log";
> var l = new Logger(LOGFILE_NAME);
> 
> if (raisedEvent.name == "myapp.sayHello") {
>        l.logln('myapp started');
>        l.logln('The message is: ' + raisedEvent.parameter.message);
> 
> 	request = new XMLHttpRequest();
> 	request.open('GET', 'http://192.168.111.56:82/home/dss_callback.php?msg=yes');
> 	request.send(null);
> }
> 
> 
> erhalte ich eine Fehlermeldung:
> 
> [Error][System] EventInterpreterPluginJavascript::handleEvent:Caught event while running/parsing script '/usr/share/dss/add-ons/myapp/myapp.js'. Message: Caught Exception while executing script: ReferenceError: XMLHttpRequest is not defined
> 
> Irgendwas an der Laufzeitumgebung muss also anders sein. Namespace? Kontext? Abgespeckte Libraries?
> Oder hat es mit Ext js zu tun?

Das Problem hier ist das die XMLHttpRequest-API zwar in den meisten
Browsern implementiert ist, sie aber nicht zum JavaScript Sprachstandard
gehört.
Einen HTTP-Request kann man über das Script aber trotzdem absetzen, auch
wenn es etwas umständlicher ist. Der dSS bietet dafür die Klasse
TcpSocket an [3]. Mit dem folgenden Code müsste der Get-Request
abgeschickt werden:

var http = "GET /home/dss_callback.php?msg=yes HTTP/1.1\r\n";
http += "HOST: 192.168.111.56";

TcpSocket.sendTo("192.168.111.56", 82, http);


Weil ich keine passende Gegenstelle habe, ist der Code leider
ungetestet. In der Google-Meter App wird aber auch ein TcpSocket
verwendet. Eventuell findest du dort weitere Anregungen [4].



[1]
http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
[2] http://de.selfhtml.org/javascript/sprache/index.htm
[3]
http://developer.digitalstrom.org/redmine/projects/dss/wiki/Scripting_inside_the_dSS#TcpSocket
[4]
http://gitorious.digitalstrom.org/dss-add-ons/dss-add-ons/blobs/master/add-ons/google-meter/scripts/google-meter.js



Gruss und ein schönes Wochenende
Sebastian


More information about the dss-developer mailing list