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

HarmonyOS
2025-01-09 16:21:45
1813浏览
收藏 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() {
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
分享
微博
QQ
微信
回复
2025-01-09 19:28:00
相关问题
WebView加载网页无法自适应
1285浏览 • 1回复 待解决
HarmonyOS 加载文本问题
1101浏览 • 1回复 待解决
HarmonyOS webview高度不能自适应
693浏览 • 1回复 待解决
HarmonyOS webview自适应屏幕
855浏览 • 1回复 待解决
HarmonyOS webview如何设置自适应
1435浏览 • 1回复 待解决
弹窗大小如何改为自适应
1475浏览 • 1回复 待解决
HarmonyOS Web组件加载文本异常
1351浏览 • 1回复 待解决
HarmonyOS 文本加载页面适配不兼容
983浏览 • 1回复 待解决
HarmonyOS web控件加载文本,字太小
1550浏览 • 1回复 待解决
HarmonyOS image加载图片宽高自适应
1060浏览 • 1回复 待解决
HarmonyOS Image 在List中自适应大小失败
947浏览 • 1回复 待解决