2016-04-08 2 views
0

В моем приложении отображается информация, в которой используются специализированные ключевые слова. Когда пользователь затрагивает одно из этих ключевых слов, приложение открывает UIWebView, который дает дополнительную информацию о ключевом слове. Вот код, который создает UIWebView:Ошибка загрузки запроса UIWebview, если URL-адрес имеет идентификатор фрагмента (#)

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 # раздел3», страница не открывается в все - даже в начале главы5.

Я предполагаю, что он пытается использовать все это как имя файла и терпеть неудачу, потому что такого файла нет. Если я отключу идентификатор фрагмента, страница будет отображаться, но не в нужном месте. Есть ли способ либо

  • получение 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 для перехода к месту, указанному хэш-тегом:

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

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

} 
Смежные вопросы