V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kingiis
V2EX  ›  Android

Android Webview setDownloadListener 解决 bloblurl

  •  
  •   kingiis · 2019-10-30 15:27:31 +08:00 · 9971 次点击
    这是一个创建于 1852 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在作一个手机上架设微服务然后用 webview 交互的需求。 在手机异常时,pc 端始终 ok。代码一样的 Android webview download listener 被触发时 有可能会收到 blob:http://..开头的 url 然而无法读取。 最终找到了一种解决方案:用 js 转化 bloburl 为 base64 。

    "javascript:" + "var xhr = new XMLHttpRequest();" + //js 交互类 WebUtils "var util = window.WebUtils;" + "xhr.open('GET', '" + blobUrl + "', true);" + "xhr.setRequestHeader('Content-type','application/sb3');" + "xhr.responseType = 'blob';" + "xhr.onload = function(e) {" + " if (this.status == 200) {" + " var blobPdf = this.response;" + " var reader = new FileReader();" + " reader.readAsDataURL(blobPdf);" + " reader.onloadend = function() {" + " base64data = reader.result;" + "console.log(base64data);" + //已经拿到了 base64 字节码 io 转 file 下边是我自己的方法 " util.getBase64(base64data);" + " }" + " }else{alert(this.status);" + "}" + "};" + "xhr.onerror=function(data){alert(data);};" + "xhr.send();"

    然而遇到了另一个 bug。xhr.onerror() 始终提示 [object ProgressEvent]. 卡在这 3 天 搜遍全网 抱了几个大腿,顺便学习了 blob 的知识 发现 服务器代码里有 回收 bloburl 的操作 oh~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 注释了这两行代码,完美 // window.URL.revokeObjectURL(url); // document.body.removeChild(downloadLink); 在下载后 别忘了 js 运行下这两行代码 回收哦

    基础的 webview 配置 别忘了 webSettings.setAppCacheEnabled(true) webSettings.databaseEnabled = true webSettings.domStorageEnabled = true webSettings.setAppCachePath(this.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).absolutePath) webSettings.useWideViewPort = true webSettings.loadWithOverviewMode = true webSettings.pluginState = WebSettings.PluginState.ON if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { webSettings.setAllowFileAccessFromFileURLs(true); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webSettings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW }

    希望遇到同样问题的 Android 小伙伴看倒这个文章,这是 h5 的坑

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5932 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:08 · PVG 14:08 · LAX 22:08 · JFK 01:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.