react native ScrollView巢狀WebView 互動問題

Tommy wang發表於2020-12-04

話不多說直接上程式碼

在webView載入完成注入js程式碼獲取高度並向rn傳送訊息


webViewLoadedEnd = () => {
    this.webview.injectJavaScript(`
         const height = document.body.clientHeight;
         window.ReactNativeWebView.postMessage(JSON.stringify({height: height}));
    `);
}

接收Web訊息並設定高度


onMessage = (e) => {
    const data = JSON.parse(e.nativeEvent.data);
    console.warn('data: ', data);
    if (data.height) {
        this.setState({
            webViewHeight: data.height
        });
    }
}

最後給出WebView實現(我這裡載入的是HTML片段)

<WebView
    ref={(ref) => this.webview = ref}
    style={{ flex: 1, height: this.state.webViewHeight }}
    source={{html: data.description}}
    originWhitelist={["*"]}
    onMessage={this.handleMessage}
    onLoadEnd={this.webViewLoaded}
    javaScriptEnabled={true}
/>

 

相關文章