2

我对 UIWebView 和离线缓存有疑问。我不知道这是否是 Webkit 错误。让我解释一下问题是什么。

对于我的示例,我正在使用此处提供的 Apple 的 Checkers 演示:https ://developer.apple.com/safaridemos/Checkers/ (我确信清单有效)。

所以我正在创建一个 UWebView 并像这样加载请求:

NSURL *url = [NSURL URLWithString:@"https://developer.apple.com/safaridemos/Checkers/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];

为了验证设备是否缓存了包含在 .manifest 文件中的文件,我将在应用程序文件夹中检查它。

APP_FOLDER/Library/Caches/xxxx.manifest/ApplicationCache.db

在 ApplicationCache.db 中:

SELECT * FROM CacheResources;

给了我清单中包含的所有缓存资源(很好用!!)。

现在我退出应用程序,关闭网络连接并再次启动应用程序。游戏加载正常,没有网络连接。

现在,这是我的问题。

我不想使用 NSURLRequest 加载我的 webView,而是使用 HTML 字符串(因为我的第三个 API 通过 json 向我发送 html 文本)

UIWebView 将像这样加载:

NSURL *url = [NSURL URLWithString:@"https://developer.apple.com/safaridemos/Checkers/"];

NSString *html = @"<html manifest=\"OfflineCheckers.manifest\"><head><title>Checkers</title><script>window.applicationCache.onupdateready = function() { console.log(\"Swapping in new applicationCache\"); applicationCache.swapCache(); }</script><meta name=\"viewport\" content=\"width=640,user-scalable=no\" /><meta name=\"apple-mobile-web-app-capable\" content=\"yes\" /><meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\" /><link rel=\"icon\" href=\"favicon.ico\" /><link rel=\"apple-touch-icon-precomposed\" href=\"resources/apple-touch-icon-precomposed.png\"/><link rel=\"apple-touch-startup-image\" href=\"resources/startup.png\"/><link href=\"resources/Checkers.css\" rel=\"stylesheet\" type=\"text/css\" /><link href=\"resources/Achievements.css\" rel=\"stylesheet\" type=\"text/css\" /><link href=\"resources/HighScores.css\" rel=\"stylesheet\" type=\"text/css\" /><link href=\"resources/EndGame.css\" rel=\"stylesheet\" type=\"text/css\" /><link href=\"resources/GameManager.css\" rel=\"stylesheet\" type=\"text/css\" /><link href=\"resources/Utilities.css\" rel=\"stylesheet\" type=\"text/css\" /></head><body onload=\"initializeScreen();\"><script src=\"resources/Achievements.js\"></script><script src=\"resources/AIOpponent.js\"></script><script src=\"resources/Checkers.js\"></script><script src=\"resources/EndGame.js\"></script><script src=\"resources/GameManager.js\"></script><script src=\"resources/HighScores.js\"></script><script src=\"resources/Utilities.js\"></script><div id=\"GameParent\"></div><script>document.body.board = new CheckerBoard(document.getElementById(\"GameParent\"));</script></body></html>";
[self.webView loadHTMLString:html baseURL:url];

我首先删除应用程序以删除所有以前缓存的资源。然后设置网络连接并启动应用程序。同样的事情发生,webview被加载,资源被缓存......

现在如果我关闭网络连接,webView 将不再加载。这就像调用 loadHTMLString:baseURL: 不要使用应用程序缓存。

我知道有一个解决方案包括下载应用程序文档文件夹中的所有离线资源并将 baseURL 设置为该文件夹,但 HTML 5 离线缓存清单可以处理它,所以我想使用它。有什么办法可以解决我的问题吗?欢迎任何帮助。

多谢你们。

4

0 回答 0