React Native 的 webview 在安卓下加载本地文件失败的问题,求大神帮忙

2017-12-02 10:08:45 +08:00
 chfight

1.需要在项目中加载一个 web 页面,所以就用的 react native 官方提供的 webview 组件(相关的代码和资源文件全部在本地放着)。

2.webview 在安卓下的路径为:source={{uri:"file:///android_asset/web/index.html"}}。

3.在 web 代码中用到了第三方库,需要本地的资源文件。我查看了下源码用的是 XMLHttpRequest 加载的。

4.以下设置都已经尝试过,但是没什么用

setJavaScriptEnabled(true); setAllowFileAccessFromFileURLs(true); setAllowUniversalAccessFromFileURLs(true);

5.web 页面可以在 android 下正常加载。

现在的问题是:在 android 下,每当加载到后缀名为.gz 的文件时,都会加载失败,但是在 ios 下表现正常(ios 下也是以 file://的 uri 加载的)。

由于本人主要是搞 js 的,对 android 没什么了解,所以求各位大神帮忙看看需要怎么做,本人表示感激不尽!

3991 次点击
所在节点    程序员
8 条回复
thomasyim
2017-12-02 13:54:13 +08:00
不太懂……不过为什么不去 Stack Overflow 问呢
dartabe
2017-12-02 13:56:50 +08:00
是权限设置问题吗? 我也是小白
rongyiran
2017-12-02 16:11:38 +08:00
你加载的时候报了什么错误,你要说出来啊?
rongyiran
2017-12-02 16:19:42 +08:00
我大胆猜测一下,可能还是因为你的路径加载错误了, fetch 封装了 XMLHttpRequest,可能跟你的网络请求关系不大.
我前段时间碰到了一个这样的错误,我用 formdata 上传文件,Android 和 iOS 上传图片没有问题,ios 上传视频也没问题,但是唯独 Android 有问题,当时就抛出了 XMLHttpRequest 的异常.当时我也以为是网络的问题,但是随着不断的尝试才发现,跟网络半毛钱关系都没有,我拍完视频后,返回了 uri 和 path,我上传的是 uri,因为 ios 穿的就是这参数,但是 Android 需要的却是 path.说这么多,也不知道你能不能看懂.
chfight
2017-12-02 16:23:19 +08:00
@thomasyim 英文水平有限,,,
chfight
2017-12-02 16:32:16 +08:00
@rongyiran 谢谢回答! 应该不是路径问题,因为在 debug 版本中,可以用 require("web/index.html"),并且文件都能正常请求。
我现在的测试结果是:请求***.json.gz 文件的时候执行了 XMLHttpRequest 的 onerror 函数,并且 status 为 0(其他文件正常)。
还有一点就是 XMLHttpRequest 是在 worker 中执行的。
faywong8888
2017-12-02 17:56:08 +08:00
改个文件后缀名试试
rongyiran
2017-12-02 22:13:36 +08:00
@chfight 如果还是解决不了
你可以留一个 demo 我帮你试试
webview 我没试过
我们一起研究试试...
我之前是做 Android 原生
写了两个 rn 项目
有点经验
帮你试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/411329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX