Réagir Natif WebView postMessage ne fonctionne pas

Je ne peux pas Réagir Natif WebView postMessage de travail. La Réagir application Native avec succès reçoit le message envoyer à partir de l'application web. Mais l'application web ne reçoit pas de messages à envoyer à partir du Réagir application Native.

Mon simple application web

HTML:

<html>
<body>

<button>Send post message from web</button>
<div>Post message log</div>
<textarea style="height: 50%; width: 100%;" readonly></textarea>

<script>
var log = document.querySelector("textarea");

document.querySelector("button").onclick = function() {
    console.log("Send post message");

    logMessage("Sending post message from web..");
    window.postMessage("Post message from web", "*");
}

window.addEventListener("message", function(event) {
    console.log("Received post message", event);

    logMessage(event.data);
}, false);

function logMessage(message) {
    log.append((new Date()) + " " + message + "\n");
}

</script>

</body>
</html>

Cette application web est hébergé chez: https://popping-heat-6062.firebaseapp.com/

Mon simple Réagir application Native

import React, {Component} from "react";
import {AppRegistry, Text, View, TouchableHighlight, WebView} from "react-native";

export default class WevViewApp extends Component {

    constructor( props ) {
        super( props );

        this.webView = null;
    }

    onMessage( event ) {
        console.log( "On Message", event.nativeEvent.data );
    }

    sendPostMessage() {
        console.log( "Sending post message" );
        this.webView.postMessage( "Post message from react native" );
    }

    render() {
        return (
            <View style={{flex: 1}}>
                <TouchableHighlight style={{padding: 10, backgroundColor: 'blue', marginTop: 20}} onPress={() => this.sendPostMessage()}>
                    <Text style={{color: 'white'}}>Send post message from react native</Text>
                </TouchableHighlight>
                <WebView
                    style={{flex: 1}}
                    source={{uri: 'https://popping-heat-6062.firebaseapp.com'}}
                    ref={( webView ) => this.webView = webView}
                    onMessage={this.onMessage}
                />
            </View>
        );
    }
}

AppRegistry.registerComponent( 'WevViewApp', () => WevViewApp );

Résultat attendu

  1. Cliquant sur "Envoyer un message à partir du web" bouton envoie
    un message à Réagir application Native et est enregistré dans le débogueur
    fenêtre
  2. Cliquant sur "Envoyer un message à partir de Réagir Natif" bouton
    envoie un message à l'application web et est imprimé dans le web
    textarea

Résultat réel

  1. Web app avec succès envoie envoie un message à Réagir application Native et est enregistré dans la fenêtre du débogueur
  2. Réagir application Native en vain envoie un message à l'application web et n'est pas imprimé dans le web textarea

Personne ne sait pourquoi l'application web ne reçoit pas les messages?

Testé avec à la fois Android et iOS.

La documentation connexe: https://facebook.github.io/react-native/docs/webview.html


Modifier: Expérimenté, un comportement qui peut identifier le problème.

Lors du test de l' 'envoyer Envoyer de message à partir du web" bouton directement dans un navigateur web de la textarea journaux qu'il a envoyer le message, et aussi qui est reçu, il est propre message.

Thu Dec 15 2016 10:20:34 GMT+0100 (CET) Sending post message from web..
Thu Dec 15 2016 10:20:34 GMT+0100 (CET) Post message from web

en essayant de même dans la WebView du Réagir application Native du textarea seulement imprime

Thu Dec 15 2016 10:20:34 GMT+0100 (CET) Sending post message from web..

La WebView détourner de la fenêtre.postMessage méthode et injecter un personnalisé?

Cela est mentionné dans l' la documentation:

La définition de cette propriété permettra d'injecter un postMessage global dans votre
webview, mais sera toujours appeler pré-existantes, les valeurs de postMessage.

Peut-être que c'est faux et c'est là que le problème est à l'?

  • J'ai le même problème, a passé toute la journée à chercher une solution de contournement mais, il n'y a pas tout, il y a une demande d'extraction dans le processus de peut-être obtenir une solution. github.com/facebook/react-native/pull/10941
InformationsquelleAutor Skarbo | 2016-12-15