强制反应本机Web视图以忽略webview的缓存版本

时间:2016-12-12 21:55:01

标签: android ios react-native

上下文

目前正在使用HTML& JS重型项目,是一个反应原生项目。所有HTML& JS在本地引用(没有通过http)。

问题

每当我对HTML或JS进行更改时,我都没有看到更改(刷新本机代码或只是再次运行),因此我不得不完全卸载应用程序。

问题

有没有办法忽略这些文件的缓存版本(我假设存在缓存机制)

我没有找到关于此主题的任何有效资源,因此非常感谢任何反馈,谢谢。

4 个答案:

答案 0 :(得分:2)

我假设您使用React Native' WebView组件来呈现您的HTML和JavaScript。此组件依赖于本机UIWebView和WebView组件,因此您可以使用与这些组件相同的过程来修改RN WebView。例如,在iOS情况下,您可以执行以下操作:

[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];

您可以将该代码放入didFinishLaunchingWithOptions AppDelegate.m方法中。基于this answer

在Android情况下,除非您可以访问WebView的实例(根据this answer),否则无法访问缓存,因此您可以使用RN的代码创建自己的WebView WebView结合了缓存删除功能。它没有看起来那么复杂。

答案 1 :(得分:0)

对于android,"应用信息"设置,在存储下将允许您清除缓存。这是您可以强制重新加载WebView中显示的任何资源的方法。

答案 2 :(得分:0)

对我来说,我使用了https://github.com/joeferraro/react-native-cookies,它确实为我清除了cookie。在使用WebView

之前,请先致电以下内容
CookieManager
  .clearAll(true)
  .then((res) => {
    console.log('LoginScreen CookieManager.clearAll =>', res)
  })

答案 3 :(得分:0)

查看WebView.android.js文件(node_modules / react-native-webview / lib / WebView.android.js),WebView.defaultProps中有一个名为 cacheEnabled 的属性,它是设置为true。

您可以尝试在WebView JSX中将 cacheEnabled 属性设置为false:

<WebView
   cacheEnabled={false}
   source={{ uri: env.APP_URL }} style={{flex:1}} />