2016-08-19 9 views
2

Возможно ли создать функцию внутри компонента WebView, вызвать функцию React Native?React Native - вызов Webview React Native function

+0

Что именно вы хотите достичь? React native является мощным, который использует собственный API android или ios API, чтобы придать силу сборке приложений с помощью React native. Возможно, есть и другой хороший способ добиться успеха без использования WebView. –

+0

Можете ли вы более конкретно о ваших требованиях –

ответ

1

Возможно, но я не уверен, что это единственный способ сделать это.

В принципе, вы можете установить обработчик событий onNavigationStateChange и вставить информацию о вызове функции в навигационном url, вот пример концепции.

В React Native контекста

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 

} 

Для вызова нативного метода, используйте это только вызвать навигационное событие WebView и вставлять информацию о вызове функции в URL.

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

да это возможно, это Existe пакет для этого react-native-webview-bridge. Я использовал его в производстве, и он отлично работает.

+0

Привет, Сидали Халлак, которые реагируют на родную версию u, используя? Потому что я использую 0.30 и устанавливаю его. Это связано с этой проблемой. Https://github.com/alinz/react-native-webview-bridge/issues/137 – ChokYeeFan

+0

Я использовал 0.25, я закончил проект два месяца назад –

0

Вы можете придать яваскрипт функцию в WebView на нагрузке, а затем использовать OnMessage, чтобы получить ответ от функции, которую вы вводили больше информации IN Here

-2

Я не уверен, но мое мнение -

Вы можете не. Webview может загружать только часть js, которую мы можем определить в компоненте Webview. Это полностью отдельный, чем другие компоненты, это всего лишь зона просмотра.

Смежные вопросы