【发布时间】:2015-04-12 18:24:20
【问题描述】:
我正在保存UIWebView 的内容,以便在下次启动时显示它,而不是再次加载它。这就是我正在做的事情:
NSString *activityesContent = [webView stringByEvaluatingJavaScriptFromString:@"document.body.outerHTML"];
[[NSUserDefaults standardUserDefaults]setObject:activityesContent forKey:@"activityesContent"];
对于下一次发布,我正在这样做:
[_tgWebView loadHTMLString:[[NSUserDefaults standardUserDefaults]objectForKey:@"activityesContent"] baseURL:nil];
这会加载页面,但没有任何 JavaScript 或 CSS。它只是一个基本的 HTML 内容。我知道我可以使用 stringByEvaluatingJavaScriptFromString 加载 JavaScript。但是,当我获取 HTML 内容时,是否可以通过某种方式获取页面上的所有 JavaScript 和 CSS,以便以后使用?
我也尝试了document.body.parentNode.innerHTML 和document.documentElement.outerHTML,但仍然显示基本的 HTML。原因是图像、CSS 和 JavaScript 都有一个服务器路径。我又问了一个question,但它不适用于我的 HTTPS 请求。
这也不起作用:
NSError *error = nil;
NSString *activitiesContent = [NSString stringWithContentsOfURL:[NSURL URLWithString:TGURL_ACTIVITIES] encoding:NSUTF8StringEncoding error:&error];
我尝试了this 解决方案,该解决方案在大多数地方都被引用。但这给了我一个空白页。我什至尝试将内容保存在文件中。当我在文件中访问页面的源时,发现CSS和JavaScript的路径是相对的:
<link href="/Content/Sass/style_sass.css?version=1.0.1.09" rel="stylesheet" /> <!-- call style_sass.css file -->
<link href="/Content/Sass/topbar.css?version=1.0.1.09" rel="stylesheet" />
如果我尝试creating resource folder,这个文件夹的大小会很大。另外还会有维护问题。每次服务器 CSS/JavaScript 发生变化时,我都必须更新 CSS/JavaScript。
这就是我得到的:
页面应该是这样的:
我终于想要了:
什么是最好的解决方法,或者有什么其他方法可以在应用程序的进一步启动时显示整个页面(包括 CSS、JavaScript、图像)?
【问题讨论】:
-
你做错了,因为你新保存了任何外部资源,如图像、css和js,并且没有任何简单的方法来保存它们。我可以建议您使用
NSURLCache的子类并存储来自服务器的整个请求 -
@sage444 :请提供一些关于您建议的实施的想法。
-
谷歌搜索并检查苹果的示例是否开始developer.apple.com/library/ios/samplecode/URLCache/…
-
@sage444 :没用。
标签: ios objective-c iphone uiwebview nsurl