react-native中WebView的问题

发布于 2022-09-05 00:18:44 字数 770 浏览 6 评论 0

react-nativeWebView布局的一个问题

假设WebView有两种方式:

  1. 直接用网址

  2. 用异步请求得到的html字符串渲染。

1、最简单的布局:只有一个WebView

如果整个页面只有一个WebView的话,那么由于WebView本身带有滚动效果,所以当加载的数据超过页面显示的范围时,可以通过上下滑动来查看。

这种情况下没有什么问题。

2、其它布局A+WebView

这种情况下,假设布局A定义在WebView的前面,能不能实现仍然是让它们看起来像是一个页面那样子滚动?

3、其它布局B+WebView

这种情况下,假设布局B定义在WebView的后面,能不能实现仍然是让它们看起来像是一个页面那样子滚动?

各位大神,怎么解决这样的问题啊?

<ScrollView>
  <View></View>
  <WebView/>
</ScrollView>

按照这个格式来写,发现不行。有什么样式要设置的吗?

或者有没有一些demo给我参考一下?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

北方的韩爷 2022-09-12 00:18:44

我是在页面里面嵌入了js脚本来实现的,在外面套一个 ScrollView 大概想下面这个样子

<ScrollView>
<View></View>
<WebView/>
</ScrollView>

然后为了解决 WebView 的高度问题,在 WebView 使用了 injectedJavaScript 属性,配合 js 脚本和 onMessage 实现实时调整高度,组件渲染大致是下面这个样子。

<WebView
  automaticallyAdjustContentInsets={false}
  javaScriptEnabled={true}
  domStorageEnabled={true}
  onMessage={this.onMessage}
  style={[style, { height: this.state.height }]}
  injectedJavaScript={injectScript}
  source={source}
/>

然后写一段 injectScript

const injectScript = `
// 解决外部高度显示不正确的问题
(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,
        }))
      }
    }
  }
  setInterval(changeHeight, 100);
}());
`;

再写一个 onMessage 函数

/**
 * web端发送过来的交互消息
 * @param data 消息内容,为 string 格式的 json
 */
onMessage(event) {
  try {
    const action = JSON.parse(event.nativeEvent.data);
    if (action.type === 'setHeight' && action.height > 0) {
      this.setState({ height: action.height });
    }
  } catch (error) {
    // pass
  }
}
憧憬巴黎街头的黎明 2022-09-12 00:18:44

最外层再套一个scrollview解决

少年亿悲伤 2022-09-12 00:18:44

webview 应该是继承于 scrollview 的,所以

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文