HarmonyOS webview加载富文本怎么自适应大小

HarmonyOS
2025-01-09 16:21:45
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

参考:

import { webview } from '@kit.ArkWeb'

@Entry
@Component
export struct WebSelfAdaptivePage {
  @State dataSource: TestDataSource =
    new TestDataSource(['hdcjsahfjkdsahfkdsajhfjkdsahfdsjakhfjkdsahfjdksaf', '测试', 'dsafhjkdsafhjkdsah',
      '你看监控大舅撒范德萨了',
      'fdasfdsafdsa', 'hdcjsahfjkdsahfkdsajhfjkdsahfdsjakhfjkdsahfjdksaf', '测试', 'dsafhjkdsafhjkdsah',
      '你看监控大舅撒范德萨了',
      'fdasfdsafdsa', 'hdcjsahfjkdsahfkdsajhfjkdsahfdsjakhfjkdsahfjdksaf', '测试', 'dsafhjkdsafhjkdsah',
      '你看监控大舅撒范德萨了', 'fdasfdsafdsa', 'hdcjsahfjkdsahfkdsajhfjkdsahfdsjakhfjkdsahfjdksaf',
      '测试', 'dsafhjkdsafhjkdsah', '你看监控大舅撒范德萨了', 'fdasfdsafdsa',
      'hdcjsahfjkdsahfkdsajhfjkdsahfdsjakhfjkdsahfjdksaf', '测试', 'dsafhjkdsafhjkdsah', '你看监控大舅撒范德萨了',
      'fdasfdsafdsa',
      'hdcjsahfjkdsahfkdsajhfjkdsahfdsjakhfjkdsahfjdksaf', '测试', 'dsafhjkdsafhjkdsah', '你看监控大舅撒范德萨了',
      'fdasfdsafdsa', 'hdcjsahfjkdsahfkdsajhfjkdsahfdsjakhfjkdsahfjdksaf', '测试', 'dsafhjkdsafhjkdsah',
      '你看监控大舅撒范德萨了', 'fdasfdsafdsa'])

  build() {
    Column() {
      List() {
        LazyForEach(this.dataSource, (testStr: string, index: number) => {
          testListItem({ index: index, htmlStr: testStr })
        })
      }
    }
  }
}

@Component
export struct testListItem {
  index?: number
  controller: webview.WebviewController = new webview.WebviewController();
  htmlStr?: string
  @State h5Height: number = 2
  @State h5Width: number = 300;
  build() {
    Column() {
      Column() {
        Web({ src: '', controller: this.controller })
          .verticalScrollBarAccess(false)
          .height(this.h5Height)
          .backgroundColor('#00000000')
          .onAppear(() => {
            this.controller.loadData(this.getHtmlContent(this.htmlStr ?? ""), "text/html", "UTF-8", " ", " ");
          })
          .onPageEnd((event) => {
            // 推荐在此事件中执行JavaScript脚本
            const script = '[document.body.offsetWidth, document.documentElement.scrollHeight]';
            this.controller.runJavaScriptExt(script).then((result) => {
              switch (result.getType()) {
                case webview.JsMessageType.ARRAY:
                  this.h5Width = (result.getArray() as number[])[0];
                  console.log('width ====' + this.h5Width)
                  this.h5Height = (result.getArray() as number[])[1]; // 这里的单位是vp
                  console.log('height ===='+this.h5Height)
                  break;
                default:
                  break;
              }
            });
          })
      }
      .width(this.h5Width+24)
      .constraintSize({
        maxWidth: 300
      })
      .padding({ left: 12, right: 12 })
      .backgroundColor(Color.Blue)
    }
    .padding({ top: 10 })
    .width('100%')
  }

  getHtmlContent(str: string): string {
    let head = "<head>" +
      "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\"> " +
      "<style type=\"text/css\"> body { line-height:" + (150) + "%} </style> \n" +
      "<style>img{max-width: 100%; width:auto; height:auto;}</style>" + //图片适应屏幕
      "<style>iframe {display: block;max-width:100%;\n" + //视频适应屏幕
      " margin-top:10px; margin-bottom:10px;}</style>" +
      "<style type=\"text/css\"> \n" +
      "</style> \n" +
      "</head>";
    let htmlStr =
      "<html>" + head + "<body style='display: inline-block;margin: 0;padding: 8px;'>" + str + "</body>" +
        "</html>";
    return htmlStr;
  }
}

class TestDataSource implements IDataSource {
  private list: string[] = []

  constructor(list: string[]) {
    this.list = list
  }

  totalCount(): number {
    return this.list.length
  }

  getData(index: number): string {
    return this.list[index]
  }

  registerDataChangeListener(listener: DataChangeListener): void {
  }

  unregisterDataChangeListener() {
  }
}
分享
微博
QQ
微信
回复
2025-01-09 19:28:00
相关问题
WebView加载网页无法自适应
817浏览 • 1回复 待解决
HarmonyOS webview高度不能自适应
237浏览 • 1回复 待解决
HarmonyOS webview自适应屏幕
350浏览 • 1回复 待解决
HarmonyOS 加载文本问题
625浏览 • 1回复 待解决
HarmonyOS webview如何设置自适应
1126浏览 • 1回复 待解决
弹窗大小如何改为自适应
1093浏览 • 1回复 待解决
HarmonyOS Web组件加载文本异常
889浏览 • 1回复 待解决
HarmonyOS 文本加载页面适配不兼容
509浏览 • 1回复 待解决
HarmonyOS web控件加载文本,字太小
1020浏览 • 1回复 待解决
HarmonyOS image加载图片宽高自适应
456浏览 • 1回复 待解决
HarmonyOS Image 在List中自适应大小失败
613浏览 • 1回复 待解决