---
title: messageport
slug: develop/es/messageport
docTags: 
createdAt: 2025-03-26T14:45:17.615Z
---

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.

:::hint{type="warning"}
Tenga en cuenta que la marca `brightsign_js_objects_enabled` debe establecerse en `verdadero` en la configuración de [roHtmlWidget](docId\:g_TJkqqHLcfT4Fw5_Z6T0).
:::

**IDL de messageport**

```javascript
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(). 

```javascript
var bsMessage = new MESSAGE_PORT();
```

## MessagePort

**PostBsMessage ()**

```javascript
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](docId\:F-cwPgnxnbI4kM6C2fWJu) con la razón establecida en "message"

## Ejemplos

El siguiente script enviará una colección de propiedades a BrightScript:

```javascript
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.

```javascript
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 while
```

El siguiente script mostrará el contenido del evento:

```javascript
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:

```javascript
nodejs.PostJSMessage({ Param1: "Data1", Param2: "Data2", Param3: "Data3" })
```

:::hint{type="info"}
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](https://github.com/brightsign/dev-cookbook/blob/c34eea462428dde39cc3d6fcb80bbfb6ff73876c/examples/send-plugin-message/pluginMessageApp.html#L14) en nuestro repositorio de GitHub.  
:::

