将Strophe.js与ReactNative结合使用

Using Strophe.js with ReactNative

本文关键字:结合 ReactNative Strophe js      更新时间:2023-09-26

我正在尝试构建一个ReactNative聊天应用程序。后端由Probody XMPP/Bosh服务器组成。现在我想使用Strophe.js Javascript库进行连接。我遇到的问题是Strophe.js库依赖于全局document变量来生成XML节点。你们中有没有人已经有同样的问题,或者知道如何解决?

我找到了一个可行的解决方案:我使用的是并行运行的ReactNative WebView,对我的ReactNatureApp不可见,类似于这个Crypto(但使用了ReactNativeWebview!而不是React Native WebView Javascript Bridge)

在WebView中,你可以使用Strophe,你只需要在WebView上为RN和Strophe之间的通信编写一个包装器。

我会尝试用一个工作的基本版本制作gitRepo

(检查加密示例:https://github.com/saulshanabrook/react-native-webview-crypto)

ReactNative中使用的Javascript引擎是无头的,这意味着它不提供全局对象,如navigatordocumentlocation等。除此之外,浏览器功能齐全,具有普通浏览器的所有XHR功能。

Storephe与服务器的通信全部基于XHR请求。您只需要模拟文档对象,以防止Strophe在找不到document对象时引发异常。正是出于这个原因模拟浏览器构建。如何使用它的一个简单示例:

let MockBrowser = require('mock-browser').mocks.MockBrowser;
let mock = new MockBrowser();
GLOBAL.window = mock.getWindow()
GLOBAL.document = mock.getDocument()
GLOBAL.navigator = mock.getNavigator()

有一些xmpp-javscript库可以与react native一起使用。但它们需要进一步的配置。

还有一些非常积极维护的用于react native的xmpp库。XMPP.js就是其中之一。它们还提供插件支持。但是,它们还处于早期开发阶段,当然像strophe.js这样的库要先进得多。