V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
chfight
V2EX  ›  程序员

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

  •  
  •   chfight · 2017-12-02 10:08:45 +08:00 · 4036 次点击
    这是一个创建于 2578 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 没什么了解,所以求各位大神帮忙看看需要怎么做,本人表示感激不尽!

    第 1 条附言  ·  2017-12-02 17:07:03 +08:00
    再补充一下:
    在请求***.json.gz 文件的时候执行了 XMLHttpRequest 的 onerror 函数,并且 status 为 0,其他文件正可以正常请求(例如***.bin),应该不是跨域问题。

    XMLHttpRequest 是在 js 的 worker 中执行的,不知道会不会产生什么影响。
    8 条回复    2017-12-02 22:13:36 +08:00
    thomasyim
        1
    thomasyim  
       2017-12-02 13:54:13 +08:00
    不太懂……不过为什么不去 Stack Overflow 问呢
    dartabe
        2
    dartabe  
       2017-12-02 13:56:50 +08:00
    是权限设置问题吗? 我也是小白
    rongyiran
        3
    rongyiran  
       2017-12-02 16:11:38 +08:00
    你加载的时候报了什么错误,你要说出来啊?
    rongyiran
        4
    rongyiran  
       2017-12-02 16:19:42 +08:00
    我大胆猜测一下,可能还是因为你的路径加载错误了, fetch 封装了 XMLHttpRequest,可能跟你的网络请求关系不大.
    我前段时间碰到了一个这样的错误,我用 formdata 上传文件,Android 和 iOS 上传图片没有问题,ios 上传视频也没问题,但是唯独 Android 有问题,当时就抛出了 XMLHttpRequest 的异常.当时我也以为是网络的问题,但是随着不断的尝试才发现,跟网络半毛钱关系都没有,我拍完视频后,返回了 uri 和 path,我上传的是 uri,因为 ios 穿的就是这参数,但是 Android 需要的却是 path.说这么多,也不知道你能不能看懂.
    chfight
        5
    chfight  
    OP
       2017-12-02 16:23:19 +08:00
    @thomasyim 英文水平有限,,,
    chfight
        6
    chfight  
    OP
       2017-12-02 16:32:16 +08:00
    @rongyiran 谢谢回答! 应该不是路径问题,因为在 debug 版本中,可以用 require("web/index.html"),并且文件都能正常请求。
    我现在的测试结果是:请求***.json.gz 文件的时候执行了 XMLHttpRequest 的 onerror 函数,并且 status 为 0(其他文件正常)。
    还有一点就是 XMLHttpRequest 是在 worker 中执行的。
    faywong8888
        7
    faywong8888  
       2017-12-02 17:56:08 +08:00 via iPhone
    改个文件后缀名试试
    rongyiran
        8
    rongyiran  
       2017-12-02 22:13:36 +08:00
    @chfight 如果还是解决不了
    你可以留一个 demo 我帮你试试
    webview 我没试过
    我们一起研究试试...
    我之前是做 Android 原生
    写了两个 rn 项目
    有点经验
    帮你试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3844 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:57 · PVG 08:57 · LAX 16:57 · JFK 19:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.