2017-07-03 12 views
0

私はWebViewとアプリケーションのRNレイヤーからデータを取得しようとしていますが、WebViewから受け取った応答はイベントオブジェクトのように見えますが、 WebViewからオブジェクトの任意の場所に送信されます。WebView onMessageが予期しない応答を返す

応答は次のようになります。

奇妙な行動の上記目的の結果、および構造の変更をクリックする

Proxy { dispatchConfig: Object, _targetInst: Constructor, isDefaultPrevented: function, isPropagationStopped: function, _dispatchListeners: function...}

{ 
    [[Handler]]: Object, 
    [[Target]]: SyntheticEvent, 
    [[IsRevoked]]: false 
} 

そして私は、私は戻ってRNに送信されるようにハードコードしました文字列を見つけることができません上記のような奇妙な出来事に見えるオブジェクトの内部:一度開いてクリック、上記の目的は次のようになります。

アイデア?

ここで私はWebViewのに渡すコードです:

var defer = function (fn, delay) { 
    if (!fn || typeof fn !== 'function') return console.log('defer: First argument must be a function.'); 
    if (!delay) delay = 0; 

    return setTimeout(fn, delay); 
}; 

var initBridge = function() { 
    try { 
    if (!window.postMessage) { 
     console.log('Could not initiate WebView bridge'); 
    } 

    defer(function() { window.postMessage('HELLO'); }, 500); 
    let sentTest = false 
    document.addEventListener('message', function (data) { 
     console.log('Received message from RN!'); 
     console.log(data); 
    }); 

    console.log('WebView bridge successfully initialised'); 
    } catch (err) { 
    console.log(window.postMessage); 
    console.log('Failed to initiate WebView bridge'); 
    console.log('Error: ', err); 
    } 
}; 

defer(initBridge); 

そして、これが私のonMessageハンドラである:あなたがすることができます、あなたはWebViewのから受け取ったメッセージにmessage.persist()を呼び出す場合

_onMessage (message) { 
    console.log('MESSAGE FROM WEBVIEW: ', message) 
    console.log('ARGS: ', arguments) 

    this._webView.postMessage('Hello, from RN!') 
    } 

答えて

2

message.nativeEvent.dataの下のデータを見つけます。

+0

'message.nativeEvent.data'は私のトリックでした。最初に 'message.persist()'を呼び出す必要がありますか? – kuhr

関連する問題