浏览器扩展 webRequest.StreamFilter.ondata 数据分块无法解析 问题

435 阅读1分钟

浏览器扩展 webRequest.StreamFilter.ondata 数据分块无法解析 问题

最近在写火狐浏览器扩展的时候,在拦截请求数据后,要将数据从json转成对象,当数据过大的时候会发现,数据只有一半的数据,这时候转json就会报错。

解决办法

function logURL (requestDetails) {
  let { url = '' } = requestDetails
  let filter = browser.webRequest.filterResponseData(requestDetails.requestId)
  let decoder = new TextDecoder('utf-8')
  let encoder = new TextEncoder()
  let data = []
  filter.ondata = event => {
    data.push(event.data)
  }

  filter.onstop = event => {
    let str = ''
    for (let buffer of data) {
      str += decoder.decode(buffer, { stream: true })
    }
    str += decoder.decode()

      let item = JSON.parse(str.substr(12, str.length - 13))

    
    filter.write(encoder.encode(str))
    filter.close()
  }

  return {}
}

参考链接