npm 包 post-message-stream 使用教程

前言

前端开发中的需求多种多样,其中涉及到不同窗口之间通讯的需求也比较常见。而其中通过 postMessage 实现的通讯需求也十分普遍。然而若要实现两端窗口间的通讯,不仅需要注意消息格式的合法性,也需要考虑通讯的稳定性、性能等问题。而 npm 包 post-message-stream 便是一款专门为 postMessage 通信打造的工具类库,能够轻松解决通讯中遇到的很多问题,对于前端开发人员来说是一款十分实用的工具包。

使用环境 & 前置知识

  • 熟悉 JavaScript 开发、postMessage 通讯机制
  • 需要在 Web 端、前端开发环境中使用

安装

--- ------- -------------------

基本使用

  1. 引入 post-message-stream
------ ----------------- ---- ---------------------
  1. 实例化
----- ------ - --- -------------------
  ----- --------------------
  ------- ------------------- --- ----------- - ---- - --------------------
  -- ------------------------------- - ------ -
--
  1. 发送信息
--------------
  ----- ---------------
  ----- -
    -- ------- ----
  -
--
  1. 接收信息
----------------- --------- -- -
  -- ------- ------
--

API 详解

实例化

----- ------ - --- --------------------------

options 对象包含以下属性:

  • name: 【必填】当前 post-message-stream 的通道名称
  • target: 【必填】指向 post-message-stream 的接收端窗口对象
  • localWindow: 当前 post-message-stream 的获取 window 方法,默认 () => window,若在 iframe 中发送则更改为 () => window.parent
  • remoteWindow: 获取远程 window 或者 target window 方法,默认 () => this._targetWindow
  • origin: postMessage 的 origin,默认为 '*',也可根据实际情况动态配置
  • pingInterval: 心跳间隔时间,默认值为 10s
  • maxHeartbeatSkip: 最大心跳间隔数,单位为 pingInterval,默认值为 3
  • pingData: 心跳数据,默认为 {type: 'PING'},也可自行配置

发送信息

---------------------

message 对象包含以下属性:

  • type: 【必填】消息类型
  • data: 根据需要设置的消息内容

接收信息

----------------- ---------

接收到新的消息时会触发回调函数 callback。而 callback 接收的参数为接收到的消息对象。

断开通讯

------------

注意事项

  1. 使用 post-message-stream 发送或接收的数据内容必须为支持 JSON.stringify() 的字段类型。

  2. 若在 iframe 中使用,需使用 window.parent 指向 post-message-stream 的接收端。

  3. post-message-stream 两端互为接收和发送,需分别实例化两次,并指向对方相应的 window。反之仅需实例化一次。

综合示例

一个简单的实例,在 parent 窗口通过 iframe 引入 child 窗口页,并向该页发送消息。

-- -----------

--------- -----
------
------
  ----- -----------------
  ---------------------
-------
------
  ------ -----------
  ------- ---------- ----------------------------

  ------- ---------------------------
-------
-------
-- ---------

------ ----------------- ---- ---------------------

----- ------ - --- -------------------
  ----- --------------------
  ------- ------------------- --- ----------- - ---- - --------------------
--

------------------- -------- ----------
-- ----------

--------- -----
------
------
  ----- -----------------
  --------------------
-------
------
  ------ ----------

  ------- --------------------------
-------
-------
-- --------

------ ----------------- ---- ---------------------

----- ------ - --- -------------------
  ----- --------------------
  ------- --------------
--

----------------- --------- -- -
  --------------------
--

总结

post-message-stream 作为一个专门针对前端 postMessage 通讯机制而设计的 npm 包,能够很好地解决通讯时的稳定性、性能等问题,使得前端开发人员能够更加高效地应对通讯需求。使用起来也非常方便,有着良好的 API 设计。当然,在实际应用中,我们也要尽可能注意 postMessage 发送的安全问题,避免 XSS 攻击等问题。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/95147


猜你喜欢

  • npm 包 jmx 使用教程

    前言 在前端开发中,我们经常会使用一些开源的第三方库或者工具来提高开发效率或者解决问题。而这些工具或库的管理和安装就需要借助于 npm 包管理器来完成。本文将介绍一个非常实用的 npm 包 jmx,这...

    5 年前
  • npm 包 ctrl-it 使用教程

    简介 ctrl-it 是一个可以在网页上模拟用户按下 Ctrl+C、Ctrl+X、Ctrl+V 或者 Ctrl+A 的 npm 包。如果你曾经做过内容编辑器、代码编辑器等与文本相关的网站,就会知道这些...

    5 年前
  • npm 包 level-rawcopy 使用教程

    介绍 level-rawcopy 是一个 npm 包,用于将一个 LevelDB 数据库原封不动拷贝到另一个数据库中。它的深度在于,在拷贝过程中可以对每个 key-value 进行预处理。

    5 年前
  • npm包 timestream-aggregates 使用教程

    前言 随着业务逐渐复杂化,数据量也越来越大,对于数据的处理和分析也变得越发关键和复杂。在这个时候,timestream-aggregates作为一款高效的npm包,能够大幅度提升我们的数据处理能力。

    5 年前
  • npm 包 @authentic/mwc-switch 使用教程

    前言 在前端开发中,我们经常需要使用各种各样的 UI 组件来提高用户体验和界面交互效果。而 Material Design Web Components (MWC) 就是一种使用 Google Mat...

    5 年前
  • npm 包 @material/theme 使用教程

    简介 在前端开发中,UI 主题是一项非常重要的工作。@material/theme 是一个基于 Material Design 的前端 UI 主题 npm 包,它包括了一些公共的颜色、字体和其他样式定...

    5 年前
  • npm 包 @material/rtl 使用教程

    @material/rtl 是一个基于 Material Design 标准的 React 组件,提供了对 RTL(从右到左)文本和样式的支持。本文将详细介绍如何使用 @material/rtl 以及...

    5 年前
  • npm 包 @material/ripple 使用教程

    前言 在前端开发中,CSS 的动效处理非常重要,包括卡片点击涟漪效果、按钮点击涟漪效果等。这里介绍一种实现点击涟漪效果的方法,利用 Google Material Design 提供的一个 npm 包...

    5 年前
  • npm 包 @material/feature-targeting 使用教程

    移动互联网时代的营销策略中,很多时候都需要根据用户特征来展示对应的内容和广告。为了实现这样的目的,很多公司都在自主开发推荐系统或者依赖第三方服务来实现用户分析和资源匹配。

    5 年前
  • npm 包 @material/elevation 使用教程

    想要让你的前端界面拥有更加生动、立体的效果,那么这篇文章就是为你准备的。本文将详细介绍 npm 包 @material/elevation 的使用教程,帮助你将一些平面的页面元素转化为具有立体感的元素...

    5 年前
  • npm 包 @material/dom 使用教程

    简介 @material/dom 是一个用于 Material Design UI 界面开发的 npm 包。它提供了一系列 DOM 操作的工具函数和组件,帮助我们快速、高效地构建和定制 UI 界面。

    5 年前
  • npm 包 @material/base 使用教程

    本文将向大家介绍如何使用 npm 包 @material/base 来做前端界面设计。@material/base 是一个由 Google 开发的 Material Design 风格的基础库,提供了...

    5 年前
  • npm 包 @material/animation 使用教程

    介绍 在前端开发中,使用动画可以提升用户交互体验和网站质量感。Google 推出的 @material/animation 是一个使用了 Material Design 指南的 JavaScript ...

    5 年前
  • npm 包 muk-require 使用教程

    前言 在开发前端项目时,使用大量的第三方库和框架,有时会遇到不同的模块之间出现了依赖关系冲突。为了解决这个问题,我们可以使用一个叫做 muk-require 的工具。

    5 年前
  • npm 包 miniget 使用教程

    npm 包 miniget 使用教程 前言 在前端开发中,我们常常需要处理各种媒体文件,而其中较常见的就是视频和音频。如何实现视频和音频文件的获取和处理,是一项非常重要的技术,而 npm 包 mini...

    5 年前
  • npm 包 m3u8stream 使用教程

    在前端领域,视频流是一项非常重要的内容,因为许多应用程序和技术都需要使用视频流,而 m3u8stream 是一个非常常用的 npm 包,它可以处理基于 HTTP Live Streaming(HLS)...

    5 年前
  • NPM 包 amoeba.io-socket-server 使用教程

    简介 在现代 Web 应用程序中,实时数据传输已经成为非常重要的一部分,socket.io 是一个基于事件驱动的实时框架,它让我们可以在客户端和服务器之间建立一个双向通信的基础。

    5 年前
  • npm 包 amoeba.io 使用教程

    简介 Amoeba.io 是一个用于构建实时 Web 应用程序的现代化平台。它提供了实时数据同步、实时可见性、实时修改以及对实时缓存的支持。在本文中,我们将介绍如何使用 npm 包 amoeba.io...

    5 年前
  • NPM包Canary使用教程

    在前端开发中,NPM包是必不可少的重要工具之一。其中Canary是一款优秀的NPM包,它提供了一种高效且可定制的方式来进行前端性能测试和调试。本文将为您介绍Canary的使用方法,以及如何将其应用到您...

    5 年前
  • npm 包 node-opus 使用教程

    简介 node-opus 是一个 Node.js 中使用 Opus 编解码器的 C++ 插件,是使用 Discord 等 VoIP 应用程序开发人员的首选。node-opus 提供了一个轻量级且高效的...

    5 年前

相关推荐

    暂无文章