我正在尝试构建一个ReactNative聊天应用。后端由Prosody XMPP / Bosh服务器组成。现在我想通过使用Strophe.js Javascript库进行连接。我遇到的问题是Strophe.js库依赖于全局document
变量来生成XML节点。你们中的任何人是否已经遇到同样的问题,或者有什么想法可以让它发挥作用?
答案 0 :(得分:2)
我找到了一个有效的解决方案: 我使用ReactNative WebView运行并行而不可见到我的ReactNativeApp,类似于这个Crypto(但使用ReactNativeWebview!而不是React Native WebView Javascript Bridge)
在WebView中你可以使用Strophe,你只需要在WebView中为RN和Strophe之间的通信编写一个包装器。
我将尝试使用正常的基本版本制作gitRepo
(检查加密示例: https://github.com/saulshanabrook/react-native-webview-crypto )
答案 1 :(得分:0)
ReactNative中使用的Javascript引擎是无头的,这意味着它不提供navigator
,document
,location
等全局对象。除此之外,浏览器功能齐全且全部普通浏览器的XHR
功能。
Storephe与服务器的通信全部基于XHR请求。您只需要模拟文档对象,以防止Strophe在无法找到document
对象时引发异常。 mock-browser建立了这个确切的原因。一个如何使用它的简单示例:
let MockBrowser = require('mock-browser').mocks.MockBrowser;
let mock = new MockBrowser();
GLOBAL.window = mock.getWindow()
GLOBAL.document = mock.getDocument()
GLOBAL.navigator = mock.getNavigator()
答案 2 :(得分:0)
有一些xmpp javscript库可以与react-native一起使用。 但是它们需要进一步的配置。
也有非常积极维护的xmpp库,用于本机反应。 XMPP.js是其中之一。他们还提供插件支持。 但是,它们还处于开发初期,当然像strophe.js这样的库要先进得多。