javascript - How to communcation between web inside webview back to react native apps
问题描述
I'm new in React Native.
I need to create communication between RN - Web - RN (RN to Web and then Web back to RN).
Assume i have list of item inside my web that called inside a webview. Each item inside list can be tapped/clicked. When i click one of item inside item list inside my web, i will redirect it to React Native apps page and show detail of realted item.
What i have done until now : I can inject Javascript from React Native to Webview like this :
<WebView
source={{uri: "myweb.com/webview.php"}}
injectedJavaScript={jsCode}
javaScriptEnabledAndroid={true}
style={{height: 100}} />
That code can open communication between React Native to Webpage inside webview, but i still fail to communication from Web inside webview to React Native. Can anyone explain, how to do it (and is it possible?)?
解决方案
您需要使用 window.postMessage 从 Web 到 RN 进行通信。
在你注入的Javascript中做这样的事情:
const injectedJs = `
window.postMessage("Your message");
`;
(在您的情况下,您需要找到列表 DOM 元素并在每次点击时使用 postMessage)
然后在您的 WebView 组件上读取此消息,如下所示:
<WebView
source={{uri: "myweb.com/webview.php"}}
injectedJavaScript={injectedJs}
startInLoadingState
javaScriptEnabledAndroid={true}
javaScriptEnabled={true}
onMessage={event => {
alert('MESSAGE >>>>' + event.nativeEvent.data);
}}
/>
您甚至可以将 json 字符串作为消息发送。
推荐阅读
- mongodb - Mongodb获取与数组中特定字段匹配的文档
- r - 无法使用 grid.arrange() 和 shinyDashboard 在 R 闪亮界面上的一个对象中显示多个绘图
- python - 无法远程连接到托管在亚马逊 ec2 实例上的 postgresql 数据库
- html - 在 html/css 中更改文本中单个字符的高度
- git - 忘记给 git push 添加标签
- swift - 如果使用 SessionDelegate,则不会调用 Swift Alamofire RequestInterceptor
- javascript - React-query:在获取数据时显示加载微调器
- javascript - 在使用父组件的 ControlValueAccessor 的子组件中设置值
- django - Dotenv 不处理 ALLOWED_HOSTS 中的多个主机
- javascript - 正则表达式提取第三个和第四个下划线之间的字符串