有没有可能在WebView组件中创建一个函数,触发React Native函数?
发布于 2016-08-19 17:32:46
这是可能的,但我不确定这是否是唯一的方法。
基本上,您可以设置一个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'
})发布于 2017-05-12 05:15:54
您可以在加载时将javascript函数注入webview,然后使用onMessage从您注入更多信息的函数中获得响应IN Here
发布于 2021-07-22 22:00:57
在<WebView/>上使用onMessage eventListner
<WevView onMessage={onMessage} ... />/** on message from webView -- window.ReactNativeWebView?.postMessage(data) */
const onMessage = event => {
const {
nativeEvent: {data},
} = event;
if (data === 'goBack') {
navigation.goBack();
} else if (data?.startsWith('navigate')) {
// navigate:::routeName:::stringifiedParams
try {
const [, routeName, params] = data.split(':::');
params = params ? JSON.parse(params) : {};
navigation.navigate(routeName, params);
} catch (err) {
console.log(err);
}
}
};在HTML中使用它来发布消息事件
window.ReactNativeWebView?.postMessage("data")https://stackoverflow.com/questions/39035026
复制相似问题