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}


相关文章
|
3月前
|
前端开发 JavaScript 大数据
React与Web Workers:开启前端多线程时代的钥匙——深入探索计算密集型任务的优化策略与最佳实践
【8月更文挑战第31天】随着Web应用复杂性的提升,单线程JavaScript已难以胜任高计算量任务。Web Workers通过多线程编程解决了这一问题,使耗时任务独立运行而不阻塞主线程。结合React的组件化与虚拟DOM优势,可将大数据处理等任务交由Web Workers完成,确保UI流畅。最佳实践包括定义清晰接口、加强错误处理及合理评估任务特性。这一结合不仅提升了用户体验,更为前端开发带来多线程时代的全新可能。
73 1
|
6月前
|
前端开发 开发者
React useMemo钩子指南:优化计算性能
React useMemo钩子指南:优化计算性能
|
6月前
|
JavaScript 前端开发 算法
说说React中的虚拟dom?在虚拟dom计算的时候diff和key之间有什么关系?
说说React中的虚拟dom?在虚拟dom计算的时候diff和key之间有什么关系?
44 0
|
前端开发 JavaScript 数据处理
Vue和React对比学习之条件判断、循环、计算属性、属性监听
条件判断、循环、计算属性、属性监听
323 0
|
前端开发 Android开发
关于React natvie WebView加载url 带特殊符号问题
url直接链接过去会报404错误,这里需要把URL处理下,想往深入了解的请看下:http://www.w3school.com.cn/jsref/jsref_encodeuri.
1230 0
|
前端开发 Android开发
React Native webView postMessage报错
报错如下: Setting onMessage on a WebView overrides existing values of window.postMessage, but a previous value was defined.
2475 0
|
Web App开发 JavaScript 前端开发
React Native 利用webView 加载echars图表 不显示问题
先看下 效果图吧 IMG_2273.PNG IMG_2272.PNG 之前用 第三方组件 native-echarts 也实现了雷达图,但是比较复杂,而且 android 和ios 上引入tpl.html文件也不一样,而且也没有上图中的渐变,反正效果不是很好。
2114 0
|
13天前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
45 9
|
1月前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
1月前
|
前端开发 JavaScript API
探索React Hooks:前端开发的革命性工具
【10月更文挑战第5天】探索React Hooks:前端开发的革命性工具