2016-04-08 61 views
0

我的应用程序显示使用专用关键字的信息。当用户触摸其中一个关键字时,该应用将打开一个UIWebView,提供有关该关键字的更多信息。下面是创建一个UIWebView代码:如果URL有片段标识符(#),UIWebview加载请求失败

NSURLRequest * request = [NSURLRequest requestWithURL: currentURL] ; 
webView = [[UIWebView alloc] initWithFrame: frame]; 
webView.scalesPageToFit=YES; 
[webView setDelegate: self]; 
[webView loadRequest:request]; 

一切工作正常进行简单的URL“chapter5.html”但如果URL有一个片段标识符“chapter5.html#SECTION3”,页面根本不打开所有 - 甚至在第五章的开头都没有。

我猜测它试图将整个事情用作文件名并失败,因为没有这样的文件存在。如果我删除片段标识符,页面会显示,但不在正确的位置。是否有任

  • 获取到的loadRequest兑现片段标识符,或
  • 做不的loadRequest片段标识符,随后调整位置,以该片段标识符的方式吗?

回答

0

您必须拆分片段标识符(hashTag),然后将剩余的URL提供给UIWebview。你可以这样说:

NSRange range = [url rangeOfString: @"#"]; 
if (range.location == NSNotFound) { 
    hashTag = nil; 
} 
else { 
    hashTag = [url substringFromIndex: range.location]; 
    url = [url substringToIndex:range.location]; 
} 

然后您设置的viewController作为UIWebViewDelegate并等待被告知,该页面已经被加载。一旦加载完成,您可以使用javascript命令转到由hashTag指定的位置:

- (void) webViewDidFinishLoad: (UIWebView *) localWebView { 

    if (hashTag != nil) { 
     NSString * javaScript = [[NSString alloc] initWithFormat: @"window.location.hash = '%@'", hashTag]; 
     [webView stringByEvaluatingJavaScriptFromString:javaScript]; 
     hashTag = nil; 
    } 

}