第二个问题实际上更容易回答。看stringWithContentsOfURL:encoding:error:方法的NSString-它允许您传递一个URL作为NSURL的一个实例(可以很容易地从NSString实例化),并返回一个字符串与页面的完整内容在该URL。例如:NSString *googleString = @"http://www.google.com";NSURL *googleURL = [NSURL URLWithString:googleString];NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
在运行这段代码之后,googlePage将包含www.google.com的HTML,以及error将包含在获取过程中遇到的任何错误。(你应该检查error)
另一种方式(从UIWebView)是有点棘手,但基本上是相同的概念。你得把请求从视图中,然后像前面一样进行提取:NSURL *requestURL = [[yourWebView request] URL];NSError *error;NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
编辑:但是,这两种方法都会影响性能,因为它们会执行两次请求。您可以通过从当前加载的UIWebView中获取内容来解决这一问题,方法是使用它的stringByEvaluatingJavascriptFromString:方法,因此:NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
这将使用DocumentObjectModel获取视图的当前HTML内容,解析JavaScript,然后将其作为HTML的NSString*提供给您。
另一种方法是先以编程方式完成请求,然后从所请求的内容加载UIWebView。假设您以上面的第二个例子为例,您有NSString *page作为呼叫的结果stringWithContentsOfURL:encoding:error:..然后,您可以使用以下方法将该字符串推入web视图中。loadHTMLString:baseURL:,假设您还保留了所请求的NSURL:[yourWebView loadHTMLString:page baseURL:requestURL];
但是,我不确定是否会运行在加载的页面中找到的JavaScript(方法名,loadHTMLString,有些模棱两可,而文档对此并没有太多的说明)。
欲了解更多信息: