UIWebView - 存储下次启动内容时出现的问题

时间:2015-02-12 05:56:21

标签: ios objective-c iphone uiwebview nsurl

我正在保存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.innerHTMLdocument.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。

这就是我得到的:

enter image description here

这就是页面应该是:

enter image description here

最后我想要的是什么:

对此有什么最好的解决方法,还是有其他方法可以在应用程序的进一步发布中显示整个页面(包括CSS,JavaScript,图像)?

2 个答案:

答案 0 :(得分:1)

您最初可以直接请求并下载完整数据,而不是使用UIWebView加载内容。下载数据后,您可以使用下载的内容加载UIWebView。使用document.body.outerHTML时,您实际上只能获取正文标记。

答案 1 :(得分:1)

您最好的选择是使用NSURLProtocol来观察页面的HTTP请求并将其写入磁盘。然后,您可以使用NSURLProtocol从磁盘提供文件,而不是通过HTTP连接重新加载文件。

Ray Wenderlich great tutorial如何使用NSURLProtocol基本上是为了这个目的。