【问题标题】:How to communcation between web inside webview back to react native apps如何在 webview 内的 web 之间进行通信以响应本机应用程序
【发布时间】:2018-11-14 09:52:19
【问题描述】:

我是 React Native 的新手。

我需要在 RN - Web - RN 之间创建通信(RN 到 Web,然后 Web 回到 RN)。

假设我的 web 中有在 webview 中调用的项目列表。列表中的每个项目都可以点击/单击。当我单击 Web 中项目列表中的一项时,我会将其重定向到 React Native 应用程序页面并显示相关项目的详细信息。

到目前为止我做了什么: 我可以像这样将 Javascript 从 React Native 注入 Webview:

<WebView
  source={{uri: "myweb.com/webview.php"}}
  injectedJavaScript={jsCode}
  javaScriptEnabledAndroid={true}
  style={{height: 100}} />

该代码可以打开React Native webview 内的Webpage 之间的通信,但我仍然无法从Webview React Native 内的Web 通信。谁能解释一下,怎么做(有可能吗?)?

【问题讨论】:

    标签: javascript react-native webview


    【解决方案1】:

    您需要使用 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 字符串作为消息发送。

    【讨论】:

    • 所以我们将使用“字符串代码”,当 React Native 从 postMessage 接收代码然后我们可以导航到其他 React Native 页面?不是吗?或者我们可以直接从 Webview 发送导航指令?
    • 您将从 WebView 发送一个 postMessage,然后您可以在 WebView 的 onMessage 函数中处理所有与 RN 相关的操作。我们在我们的应用程序中所做的是将 json 字符串作为带有 actionType 和 bodyData 的消息发送。然后在我们的 onMessage 函数中,我们有一个 switch(actionType) 并在那里我们处理我们需要在我们的应用程序中打开的不同视图。
    • 我已经尝试过这段代码。这段代码在 iOS 中运行良好,但在 Android 中不行。在 Android 中什么也没有发生。你能解释一下为什么吗?
    • 当我跟踪时,问题仅在您尝试注入时出现: const injectionJs = ` window.postMessage("Your message"); `;在 Android 中不工作,但如果不是来自注入的脚本,则工作。
    • 我整理了一份零食,展示了 postMessage 的基本用法,并且可以在我的安卓手机上使用。它基本上会使用加载的 url 触发警报。 snack.expo.io/B1MDei5aX。我敢肯定有很多情况下,您需要对其进行一些调整才能使其正常工作。例如,我注意到如果您在注入的 Javascript 中犯了任何错误,那么代码将不会运行,并且没有错误告诉您出了什么问题……也许您可以在示例中添加一些零食,以便我看看.
    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多