# 使用 JavaScript 创建应用内消息

应用内消息 (In-app message) 在用户与应用互动时直接显示在应用界面内。因此，用户认为应用内消息比推送通知、电子邮件或短信的侵入性更小。

应用内消息总是包含称为富媒体 (Rich Media) 的图片或视频。应用内消息还可以包含格式化文本、链接、带有 CTA（行动号召）的按钮以及其他数据，让您能够以引人入胜的形式与应用用户沟通。

应用内消息基于 HTML 并支持 JavaScript。Pushwoosh SDK 会注入一个 `pushwoosh` 变量，该变量提供以下 API：

您可以使用 [`postEvent`](/zh/developer/api-reference/user-centric-api#postevent) 方法直接从应用内消息的 JavaScript 代码发送新事件。

```javascript
pushwoosh.postEvent(
  'eventName',
  {
    TestAttributeString: 'testString',
    TestAttributeInt: 42,
    TestAttributeList: [123, 456, 'someString'],
    TestAttributeBool: true,
    TestAttributeNull: null,
    TestAttributeDaysAgo: 7,
    TestAttributeDate: new Date()
  },
  function() {
    console.log('Post event success')
  },
  function(error) {
    console.log('Post event failed: ', error)
  }
)
```

您还可以使用 `sendTags` 方法从应用内消息为设备设置标签 (tag)：

```javascript
pushwoosh.sendTags({
  IntTag: 42,
  BoolTag: true,
  StringTag: 'testString',
  ListTag: ['string1', 'string2']
})
```

要获取设备标签，请按如下方式使用 `getTags` 方法：

```javascript
pushwoosh.getTags(
  function(tags) {
    console.log('tags: ' + JSON.stringify(tags))
  },
  function(error) {
    console.log('failed to get tags: ' + error)
  }
)
```

如果您想从 JavaScript 代码中关闭应用内消息，请调用 `closeInApp()` 方法：

```
pushwoosh.closeInApp();
```

或者，您也可以为按钮/链接使用自定义方案 URL `<a href="pushwoosh://close">`。

当发送带有富媒体 (Rich Media) 的推送通知时，您可以使用以下代码获取该推送的自定义数据：`pushwoosh.getCustomData()`

### 自定义 JavaScript 接口

通过将原生的 Java/Objective-C/Swift 方法暴露给 JavaScript，可以无限扩展应用内消息的 JavaScript 功能。这可以通过 Pushwoosh SDK 的 `addJavascriptInterface` 方法实现，适用于 [iOS](https://github.com/Pushwoosh/pushwoosh-ios-sdk/blob/master/iOS_SDK/Pushwoosh/PushwooshCore/InAppMessages/PWInAppManager.h) 和 [Android](https://github.com/Pushwoosh/pushwoosh-android-sdk/blob/master/Sources/pushwoosh/src/main/java/com/pushwoosh/inapp/InAppManager.java)。