gpt4 book ai didi

javascript - Android Webview 从过期的缓存中加载资源

转载 作者:太空狗 更新时间:2023-10-29 13:22:01 25 4
gpt4 key购买 nike

我正在创建一个混合应用程序,其中 UI 在服务器上,我在我的应用程序中使用 webview 并仅在必要时(需要硬件访问的地方)使用 native 功能。

我的问题是有时 Webview 从缓存中加载资源,即使在服务器上上传了较新的资源(如 javascript 等)时也是如此。当我同时从计算机上的浏览器打开相同的 URL 时,我不会遇到这个问题。我怎样才能确保 webview 从服务器更新它的内容。这种行为也是不可预测的,因为 webview 最终会更新其缓存,但会在许多页面加载之后进行。

在每次运行时清除缓存或 LOAD_NO_CACHE 模式不是一个选项,因为我想要缓存功能(但不存在当服务器上有新资源时从缓存中加载旧资源的风险)。

这是代码 fragment 。浏览器.loadURL();正在应用程序的其他地方调用

    browser = (WebView) findViewById(R.id.browser);
progress_bar = (ProgressBar) findViewById(R.id.progressBar1);


browser.getSettings().setSavePassword(false);
browser.getSettings().setJavaScriptEnabled(true);

browser.setWebChromeClient( .... )
browser.setWebViewClient( .... ) // omitted complete functions to save space

最佳答案

我在 Web 应用程序上所做的事情是在脚本和链接标记中向我的 JavaScript 和 CSS 文件添加虚假版本标志。所以,它在网络端看起来像这样。这使浏览器认为资源不同并导致它重新加载它。

<link href="./css/my_style.css?version=1.0" rel="stylesheet" type="text/css" />
<script src="./js/my_script.js?version=1.3" type="text/javascript"></script>

如果你想在应用端控制它。您可以在 SharedPreferences 文件中添加一种“过期日期”。我为某些应用程序中的图像缓存执行此操作。基本上,您会在该日期过后清除缓存。它看起来像这样。

String expireDateString = getSharedPreferences("WebviewExpireCache", Context.MODE_PRIVATE);
Date today = new Date();
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
if(today.after(format.parse(expireDateString ))){
browser.clearCache(true);
}

关于javascript - Android Webview 从过期的缓存中加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com