messageport
El objeto JavaScript messageport permite pasar un objeto JavaScript como un arreglo asociativo de JavaScript a BrightScript. Este canal de comunicación funciona ya sea que el script se esté ejecutando dentro de un widget HTML creado por BrightScript, un widget HTML creado desde JavaScript o una instancia de Node.js®.
Esta es la forma preferida para que el contenido JavaScript se comunique con su aplicación principal.
Tenga en cuenta que la marca brightsign_js_objects_enabled debe establecerse en verdadero en la configuración de roHtmlWidget.
IDL de messageport
interface BsMessage {
attribute String type;
};
callback MessagePortCallback = void (BsMessage event);
interface MessagePort {
void PostBSMessage(Object message);
void addEventListener(String type, MessagePortCallback callback);
void removeEventListener(String type, MessagePortCallback callback);
};Creación de objetos
Para crear un objeto messageport primero cargue el módulo @brightsign/messageport usando el método require().
var bsMessage = new MESSAGE_PORT();MessagePort
PostBsMessage ()
PostBsMessage(Object message)Los objetos pasados a PostBSMessage() se recibirán como eventos en la aplicación principal:
- para widgets HTML creados desde BrightScript, el roHtmlWidget principal generará un roHtmlWidgetEvent con la razón establecida en "message"
- para widgets HTML creados desde JavaScript, el @brightsign/htmlwidget principal generará un evento "message"
- para aplicaciones Node, el objeto principal roNodeJs generará un roNodeJsEvent con la razón establecida en "message"
Ejemplos
El siguiente script enviará una colección de propiedades a BrightScript:
function myFunction()
{
var bsMessage = new require("@brightsign/messageport");
bsMessage.PostBSMessage({complete: true, result: "PASS"});
}El mensaje aparecerá en BrightScript como un roNodeJsEvent. En este caso, GetData().reason es igual a "message" y GetData().message contiene el roAssociativeArray.
while not finished
ev = mp.WaitMessage(30000)
if type(ev) <> "roHtmlWidgetEvent" then
print type(ev)
stop
end if
payload = ev.GetData()
print payload
print "Reason: "; payload.reason
if payload.reason = "message" then
print "Message: "; payload.message
if payload.message.complete = invalid then
stop
else if payload.message.complete = "true" then
finished = true
if payload.message.result = "PASS" then
print "Test passed"
else
print "Test failed: "; payload.message.err
stop
end if
end if
end if
end whileEl siguiente script mostrará el contenido del evento:
var MESSAGE_PORT_CLASS = require("@brightsign/messageport");
var bsMessage = new MESSAGE_PORT_CLASS();
bsMessage.addEventListener('bsmessage', function(msg) { console.log(JSON.stringify(msg)); }) En BrightScript, el método roNodeJs.PostJSMessage() puede utilizarse para publicar un mensaje en JavaScript:
nodejs.PostJSMessage({ Param1: "Data1", Param2: "Data2", Param3: "Data3" })La interfaz messageport es la forma preferida para que el contenido JavaScript se comunique con su aplicación principal. messageport es un bus compartido, por lo que si lo habilita en su aplicación, también puede recibir mensajes del BrightSign OS en esa aplicación.
Para enviar/recibir mensajes en aplicaciones Node.js de BrightAuthor:connected, consulte este ejemplo en nuestro repositorio de GitHub.