2016-08-19 23 views
2

Ist das möglich, erstellen Sie eine Funktion innerhalb der WebView Komponente, Trigger React Native-Funktion?React Native - Webview Aufruf React Native Funktion

+0

Was genau wollen Sie erreichen? Reactive native ist sehr leistungsfähig und verwendet die native Android- oder ios-API, um die Anwendungsentwicklung mit nativem React zu stärken. Es könnte andere gute Möglichkeiten geben, ohne WebView zu arbeiten. –

+0

Kannst du genauer auf deine Anforderungen eingehen? –

Antwort

1

Es ist möglich, aber ich bin mir nicht sicher, ob es der einzige Weg ist, dies zu tun.

Grundsätzlich können Sie eine onNavigationStateChange Event-Handler und Funktionsinformationen in Navigations-URL einbetten, hier ein Beispiel für das Konzept.

In Reaktion india Kontext

render() { 

    return <WebView onNavigationStateChange={this._onURLChanged.bind(this)} /> 
} 

_onURLChanged(e) { 

    // allow normal the natvigation 
    if(!e.url.startsWith('native://')) 
     return true 
    var payload = JSON.parse(e.url.replace('native://', '')) 
    switch(e.functionName) { 
     case 'toast' : 
      native_toast(e.data) 
     break 
     case 'camera' : 
      native_take_picture(e.data) 
     break 
    } 
    // return false to prevent webview navitate to the location of e.url 
    return false 

} 

native Methode aufzurufen, diese verwenden nur webview Navigationsereignis auslösen und die Funktion Anrufinformationen in URL einbetten.

window.location = 'native://' + JSON.stringify({ 
    functionName : 'toast', data : 'show toast text' 
}) 
0

ja, es ist möglich, existe es ein Paket für die react-native-webview-bridge. Ich habe es stark in der Produktion verwendet und es funktioniert perfekt.

+0

Hallo Sidali Hallak, welche native Version verwendest du mit? Weil ich 0.30 verwende und es installiere. Es ist Ursache dieses Problems https://github.com/alinz/react-native-webview-bridge/issues/137 – ChokYeeFan

+0

Ich war 0,25, ich beendete das Projekt vor zwei Monaten –

0

Sie könnten eine Javascript-Funktion in die Webansicht auf Last injizieren und verwenden dann onMessage Antwort von der Funktion erhalten Sie weitere Informationen injiziert IN Here

-2

Ich bin nicht sicher, aber meiner Meinung nach -

Sie können nicht. Webview kann nur den js-Teil laden, den wir in der Webview-Komponente definieren können. Dies ist völlig getrennt von anderen Komponenten, es ist nur ein sichtbarer Bereich.