HarmonyOS Web组件,离线包方案

离线包方案:通过劫持请求的方案实现,请麻烦给一个demo。劫持html,劫持css js。

HarmonyOS
2024-09-05 11:40:33
975浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
superinsect

1.在onInterceptRequest对加载url中文件类型进行判断进行html,js及css劫持。

2.对于图片也可以通过类型进行拦截,做相应资源替换(若本地有资源图片)或放过

3.拦截后WebResourceResponse返回响应数据则按照响应数据加载,无响应数据则返回null表示按照原来的方式加载。图片及接口若放开则直接返回null

Web({ src:'https://test.index.html/', controller: this.controller }) 
  .onInterceptRequest((event) => { 
    let url: string = '' 
    if (event) { 
      url = event.request.getRequestUrl() 
      console.log('url---:' + event.request.getRequestUrl()) 
    } 
    let head1: Header = { 
      headerKey: "Connection", 
      headerValue: "keep-alive" 
    } 
    let head2: Header = { 
      headerKey: "Cache-Control", 
      headerValue: "no-cache" 
    } 
    this.heads.push(head1) 
    this.heads.push(head2) 
    if (url == 'https://test.index.html/fakao/') { 
      console.log('d:'+this.currentPath) 
      const file = fs.openSync(this.currentPath+ '/index.html',fs.OpenMode.READ_ONLY); 
      this.responseweb.setResponseHeader(this.heads) 
      this.responseweb.setResponseData(file.fd) //$rawfile('dist/index.html') 
      this.responseweb.setResponseEncoding('utf-8') 
      this.responseweb.setResponseMimeType('text/html') 
      this.responseweb.setResponseCode(200) 
      this.responseweb.setReasonMessage('OK') 
      return this.responseweb 
    } 
    else if (url.endsWith('css') || url.endsWith('js')) { 
      const result = extractFileNameAndExtension(url) 
      try { 
        console.log('c:'+`${this.currentPath}/${result.fileName}.${result.extension}`) 
        const file = fs.openSync(`${this.currentPath}/${result.fileName}.${result.extension}`,fs.OpenMode.READ_ONLY); 
        this.responseweb.setResponseHeader(this.heads) 
        this.responseweb.setResponseData(file.fd) //$rawfile('dist/'+result.fileName+'.'+result.extension) 
        this.responseweb.setResponseEncoding('utf-8') 
        this.responseweb.setResponseMimeType(result.mimeType) 
        this.responseweb.setResponseCode(200) 
        this.responseweb.setReasonMessage('OK') 
        return this.responseweb 
      } catch (e) { 
        console.log('er:'+`${this.currentPath}/${result.fileName}.${result.extension}`) 
        return null 
      } 
    }else if (url.endsWith('png') || url.endsWith('jpg')) { 
      //图片做替换 
      return null 
    }else { 
      //其他 
      return null 
    } 
  })
  • 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.
分享
微博
QQ
微信
回复
2024-09-05 15:37:58


相关问题
HarmonyOS 离线 下载解压
1534浏览 • 0回复 待解决
HarmonyOS web离线加载请求跨域问题
1379浏览 • 1回复 待解决
基于HarmonyOS实现H5离线方案有哪些?
1288浏览 • 1回复 待解决
HarmonyOS 离线地图
858浏览 • 1回复 待解决
离线webview组件有没有相关使用文档
2528浏览 • 1回复 待解决
hsp和har互相转换方案
2243浏览 • 1回复 待解决
应用,求解决方案
2940浏览 • 1回复 待解决
HarmonyOS 组件曝光跟踪方案
931浏览 • 1回复 待解决
应用体积大小优化解决方案
1549浏览 • 1回复 待解决
HarmonyOS Map kit能否离线使用
840浏览 • 1回复 待解决
HarmonyOS 如何离线访问vue页面
514浏览 • 1回复 待解决
HarmonyOS web组件 加载web页面异常
1226浏览 • 1回复 待解决
大小优化,有没有好的解决方案
1200浏览 • 2回复 待解决