我正在保存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,图像)?
答案 0 :(得分:1)
您最初可以直接请求并下载完整数据,而不是使用UIWebView加载内容。下载数据后,您可以使用下载的内容加载UIWebView。使用document.body.outerHTML
时,您实际上只能获取正文标记。
答案 1 :(得分:1)
您最好的选择是使用NSURLProtocol
来观察页面的HTTP请求并将其写入磁盘。然后,您可以使用NSURLProtocol
从磁盘提供文件,而不是通过HTTP连接重新加载文件。
Ray Wenderlich great tutorial如何使用NSURLProtocol
基本上是为了这个目的。