lifeRestart
lifeRestart copied to clipboard
点击save,安卓webview下载blob文件失败
我把你们的网页内嵌到安卓webview里,但是在网页右下角点击save,保存配置时,我使用这个方法注入js,下载blob文件,失败了,而且你们的网页直接放在 via浏览器里,也无法保存配置文件,在chrome里可以
如果我要在安卓webview实现保存blob形式的配置json文件,我应该怎么做? https://www.jianshu.com/p/49d52954afa7 这个尝试过了,还是不行
有几种可能性: 1、 WebView的JS注入失败le ,或者压根没触发注入的方法 2、 看那个文章,注入的代码中需要指定bob的url。但是实际保存的时候,是直接从localStorage临时构建的json格式的东西。会不会是这个导致的? 3、 看那个文章,下载类型好像是指定为了image/gif,会不会类型原因,导致下载失败?
有几种可能性: 1、 WebView的JS注入失败le ,或者压根没触发注入的方法 2、 看那个文章,注入的代码中需要指定bob的url。但是实际保存的时候,是直接从localStorage临时构建的json格式的东西。会不会是这个导致的? 3、 看那个文章,下载类型好像是指定为了image/gif,会不会类型原因,导致下载失败?
感谢回答,我直接在当前网页下载监听时,获取到webview,然后用它加载那个js,
js调用了,但是有报错,这个是用电脑调试网页时报错的截图
里面的输出的test如图,我加了两句,看执行到哪里了
我不知道为什么js获取不到这个url,可能是不在一个对话?百度谷歌了,也没找到解决方法
果然是遇到了我说的第二个问题。 url不能乱写的。
可以看到这个是官方源码里的存档逻辑。
因此你的代码需要改造一下,把URL完全剃掉,换成现成的json对象。
json的构造方式官方也给出了。
这里比较重要的问题在于,需要怎么样在url里面,或者注入的js代码块里面,拿到所需的数据集了。 关于注入js代码块的方法,一般的其实也是在url里面通过innerHTML或者类似的手段,以文本的形式,塞一段代码给webview渲染的页面。
之前也有研究过类似的问题,感觉ES系列的,拿某个object内的对象超麻烦,还不如先在object内提供公共方法或者成员,暴露所需的内容,或者将内容塞给window.xxx。 大概率是由于我的ES非常菜鸡,完全不了解ES基本原理,导致的问题。
由于低版本的安卓或webview,url有长度限制,因此可能需要通过构建多个不同代码块(比如将一个超长的逻辑拆分成多个不同的方法/函数,在某一个方法/函数内进行整合),协同工作,以此绕过url长度限制问题。
(对了,我想起来了,之前研究过程中发现,ES构建的虚拟DOM获取起来特别复杂,压根没找到入口在哪儿,比如windows.xxx.yyy.aaa.bbb,压根没找到那个xxx.yyy...分别是啥)