にょっす速報🐮✋

React-NativeのボタンをクリックしたときにWebViewでJavascriptを実行する方法

この記事の目次

React-Nativeを使用して、ボタンをクリックした際にWebView内でJavaScriptを実行する方法をご紹介します。以下はサンプルコードです。

# コンポーネントの定義
export default class App extends Component<{}> {
  constructor(props){
    super(props);
  }

  render() {
    return (
      <View style={styles.parent}>
          <WebView
            source={{uri: 'https://mywebsite.com'}} style={styles.fullScreen}
            injectedJavaScript={jsCode}
            javaScriptEnabledAndroid={true}
          />
          <View style={styles.floatView}>
            <Button
              title="Cart"
              onPress={toggleCart}
              color="black"
            />
          </View>
      </View>
    );
  }
}

# ボタンクリック時の処理
const toggleCart = function() {
  let jsCode = "app.trigger('toggle:cart');";
  // WebView内でJavaScriptコードを実行する
}

# WebViewとReact-Nativeの通信
// React-NativeからWebViewへメッセージを送信する
this.webview.postMessage("Hello from RN");

// WebView内でメッセージを受信する
...
<script>
  document.addEventListener("message", function(data) {
    // 適切な関数を呼び出すなどの処理
  });
</script>
...

# react-native-webview-bridgeの利用
// WebViewとReact-Native間の通信を提供するモジュール
const injectScript = `
  (function () {
    if (WebViewBridge) {
      WebViewBridge.onMessage = function (message) {
        if (message === "hello from react-native") {
          WebViewBridge.send("got the message inside webview");
        }
      };

      WebViewBridge.send("hello from webview");
    }
  }());
`;

var Sample2 = React.createClass({
  onBridgeMessage(message){
    const { webviewbridge } = this.refs;

    switch (message) {
      case "hello from webview":
        webviewbridge.sendToBridge("hello from react-native");
        break;
      case "got the message inside webview":
        console.log("WebViewからメッセージを受信しました!");
        break;
    }
  },

  render() {
    return (
      <WebViewBridge
        ref="webviewbridge"
        onBridgeMessage={this.onBridgeMessage.bind(this)}
        injectedJavaScript={injectScript}
        source={{uri: "http://google.com"}}
      />
    );
  }
});


上記のサンプルコードは、React-Nativeのボタンクリック時にWebView内でJavaScriptを実行し、またWebViewとReact-Native間での通信を実現する方法を示しています。react-native-webview-bridgeモジュールを使用することで、簡単にコミュニケーションを確立できます。
);

コメント(0件)


トピックス