如果URL具有片段标识符(#),UIWebview加载请求将失败

时间:2016-04-08 11:54:47

标签: ios uiwebview

我的应用显示使用专门关键字的信息。当用户触摸其中一个关键字时,该应用程序会打开一个UIWebView,提供有关该关键字的其他信息。以下是创建UIWebview的代码:

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

一切都可以正常使用简单的网址" chapter5.html"但是如果URL有一个片段标识符" chapter5.html#section3",那么该页面根本不会打开 - 甚至在第5章的开头也是如此。

我猜测它试图将整个文件用作文件名而失败,因为不存在这样的文件。如果我剥离片段标识符,则会显示页面,但不会显示在正确的位置。有没有办法

  • 获取loadRequest以支持片段标识符,或
  • 在没有片段标识符的情况下执行loadRequest,然后将位置调整为片段标识符的位置?

1 个答案:

答案 0 :(得分: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;
    }

}