Проблемы с использованием UIWebView для реализации информационной страницы

#ios

#iOS

Вопрос:

В моем приложении у меня есть контроллер просмотра на основе UIWebView, показывающий информацию и кредиты о самом приложении. В качестве части информации отображается версия приложения, полученная из информационного справочника mainBundle. Итак, этой строки нет в исходном HTML; она устанавливается программно, путем замены заполнителя.

Поэтому последовательность такова: 1) Я загружаю HTML в NSString 2) Я заменяю заполнитель фактической версией 3) Я показываю результирующую строку в UIWebView, вызывая метод loadHTMLString:baseURL:

HTML также содержит гиперссылки на некоторые веб-страницы в Интернете. Все в порядке, но для этой проблемы: если я коснусь гиперссылки и, следовательно, перейду на соответствующую веб-страницу, я не смогу вернуться на свою исходную информационную страницу (canGoBack возвращает NO, GoBack ничего не делает).

Есть предложения? Заранее спасибо.

Ответ №1:

В конце концов, я нашел удовлетворительное решение, которым я хотел бы поделиться.

1) Я изменил HTML-код своей информационной страницы, вставив следующий код, где я хочу показать версию приложения:

 <p>App  version:
<script type="text/javascript">
    var args = document.location.search.substring(1).split("amp;");
    for (var i in args) {
        var nameValue = args[i].split("=");
        if (nameValue[0] == "version")
            var version = nameValue[1];
    }
    if (version)
        document.write(version);
</script>
</p>
  

Этот фрагмент кода проанализирует часть запроса URL-адреса, ищет аргумент «version=<версия>» и использует его значение для отображения версии приложения.

2) При подготовке URL-адреса, который будет использоваться UIWebView, я извлекаю версию приложения из основного пакета:

 NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
  

Затем я добавляю его в конец моей строки URL:

 NSString* urlString = [NSString stringWithFormat:@"<my_info_page>.html?version=%@", version];
  

3) Наконец, я использую UIWebView для отображения страницы:

 NSURL* url = [[NSURL alloc] initWithString:urlString];
NSURLRequest* request [[NSURLRequest alloc] initWithUrl:url];
[mWebView loadRequest:urlRequest];
[urlRequest release];
[url release];
  

где mWebView — это IBOutlet типа UIWebView, правильно подключенный к веб-просмотру в файле XIB.

Он корректно работает на моем iPhone 4, включая функции веб-просмотра назад / вперед при переходе по гиперссылкам, сохраняя пользователя внутри приложения.

Ответ №2:

В этом случае я бы вышел из приложения и загрузил Safari:

 - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {

    [[UIApplication sharedApplication] openURL:request.URL];
    return NO;

}
  

Единственным недостатком является то, что пользователь выходит из вашего приложения. Вы могли бы поместить alertview в этот метод, чтобы сначала предупредить их…

В качестве альтернативы вам придется закодировать собственную кнопку возврата.

Комментарии:

1. Не совсем то, что я ищу, но интересные предложения. Голосование завершено.