UIWebView loadHTMLString:baseURL:脱机缓存清单问题

时间:2012-09-18 10:26:47

标签: ios caching uiwebview manifest offline

UIWebView和离线缓存存在问题。我不知道它是否是一个Webkit bug。让我解释一下这个问题。

对于我的例子,我正在使用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 /库/缓存/ 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];

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

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

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

谢谢你们。

0 个答案:

没有答案