react-native WebView高度计算

简介: react-native WebView高度计算

这里写目录标题


方法一(postMessage与onMessage)


const BaseScript = `
(function () {
    var height = null;
    function changeHeight() {
      if (document.body.scrollHeight != height) {
        height = document.body.scrollHeight;
        if (window.postMessage) {
          window.postMessage(JSON.stringify({
            type: 'setHeight',
            height: height,
          }))
        }
      }
    }
    setTimeout(changeHeight, 300);
} ())
`;
  onMessage(event) {
    try {
      const action = JSON.parse(event.nativeEvent.data);
      if (action.type === 'setHeight' && action.height > 0) {
        this.setState({ height: action.height });
      }
    } catch (error) {
    }
  }
  <WebView
    originWhitelist={['*']}
    injectedJavaScript={BaseScript}
    style={{
      width: '100%',
      height: this.state.height,
    }}
    javaScriptEnabled 
    domStorageEnabled 
    onMessage={this.onMessage.bind(this)}
    source={{ html: html, baseUrl: '' }}
  />

方法二(onNavigationStateChange)


  1. html也许是接口中异步请求来的内容,因此用三元表达式确保html存在再显示,否则会出现高度为空的情况。
const { height= 0, html='' }=this.state
    const lastHtml = `
    <!DOCTYPE html>
      <html>
      <body>
        ${html}
      <script>
        window.οnlοad=function(){
          window.location.hash = 1;
          document.title = document.body.clientHeight;
        }
      </script>
      </body>
      </html>
    `;
 {html ? (
    <View style={{ height }}>
      <WebView
        originWhitelist={['*']}
        style={{
          width: '100%',
        }}
        contentInset={{ top: 0, left: 0 }}
        javaScriptEnabled 
        domStorageEnabled
        scrollEnabled={false}
        onNavigationStateChange={(state) => {
          if (parseInt(state.title, 10)) {
            this.setState({
              height: parseInt(state.title, 10) + 20,
            });
          }
        }}
        source={{ html: lastHtml, baseUrl: '' }}
      />
    </View>
 ) : null}


相关文章
|
5月前
|
前端开发 JavaScript 大数据
React与Web Workers:开启前端多线程时代的钥匙——深入探索计算密集型任务的优化策略与最佳实践
【8月更文挑战第31天】随着Web应用复杂性的提升,单线程JavaScript已难以胜任高计算量任务。Web Workers通过多线程编程解决了这一问题,使耗时任务独立运行而不阻塞主线程。结合React的组件化与虚拟DOM优势,可将大数据处理等任务交由Web Workers完成,确保UI流畅。最佳实践包括定义清晰接口、加强错误处理及合理评估任务特性。这一结合不仅提升了用户体验,更为前端开发带来多线程时代的全新可能。
119 1
|
8月前
|
前端开发 开发者
React useMemo钩子指南:优化计算性能
React useMemo钩子指南:优化计算性能
|
8月前
|
JavaScript 前端开发 算法
说说React中的虚拟dom?在虚拟dom计算的时候diff和key之间有什么关系?
说说React中的虚拟dom?在虚拟dom计算的时候diff和key之间有什么关系?
51 0
|
前端开发 JavaScript 数据处理
Vue和React对比学习之条件判断、循环、计算属性、属性监听
条件判断、循环、计算属性、属性监听
336 0
|
前端开发 Android开发
关于React natvie WebView加载url 带特殊符号问题
url直接链接过去会报404错误,这里需要把URL处理下,想往深入了解的请看下:http://www.w3school.com.cn/jsref/jsref_encodeuri.
1245 0
|
前端开发 Android开发
React Native webView postMessage报错
报错如下: Setting onMessage on a WebView overrides existing values of window.postMessage, but a previous value was defined.
2485 0
|
Web App开发 JavaScript 前端开发
React Native 利用webView 加载echars图表 不显示问题
先看下 效果图吧 IMG_2273.PNG IMG_2272.PNG 之前用 第三方组件 native-echarts 也实现了雷达图,但是比较复杂,而且 android 和ios 上引入tpl.html文件也不一样,而且也没有上图中的渐变,反正效果不是很好。
2124 0
|
API Android开发 数据安全/隐私保护
解决android webview 加载http url 失败 net::ERR_CLEARTEXT_NOT_PERMITTED 错误
解决android webview 加载http url 失败 net::ERR_CLEARTEXT_NOT_PERMITTED 错误
1136 0
|
7月前
|
Web App开发 移动开发 前端开发
52. 【Android教程】网页视图:WebView
52. 【Android教程】网页视图:WebView
110 1
|
6月前
|
Web App开发 JavaScript 前端开发
Android端使用WebView注入一段js代码实现js调用android
Android端使用WebView注入一段js代码实现js调用android
154 0