Как я получаю последний код состояния HTTP от UIWebView?

В настоящее время я работаю над преобразованием огромной CMS из варианта 1 в вариант 3, и все идет хорошо. Мы выбрали визуализацию на стороне сервера, потому что SEO очень важен для нас, и мы хотим, чтобы сайты работали на мобильных телефонах.

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

  • Экспресс для основы приложения.
    (https://github.com/visionmedia/express)
  • Запрос на получение данных.
    (https://github.com/mikeal/request)
  • Подчеркнуть шаблоны, которые обрабатываются на стороне сервера. Я повторно использую их на клиенте.
    (https://github.com/documentcloud/underscore)
  • UTML оборачивает шаблоны подчеркивания, чтобы они работали с Express.
    (https://github.com/mikefrey/utml)
  • Upfront собирает шаблоны и позволяет выбирать, какие из них отправляются клиенту.
    (https://github.com/mrDarcyMurphy/upfront)
  • Express Expose передает извлеченные данные, некоторые модули и шаблоны во внешний интерфейс.
    (https://github.com/visionmedia/express-expose)
  • Backbone создает модели и представления на внешнем интерфейсе после проглатывания данных, которые были переданы.
    (https://github.com/documentcloud/backbone)

Это ядро ​​стека. Некоторые другие модули, которые я нашел полезными:

  • fleck (https // github.com / trek / fleck)
  • moment (https // github.com / timrwood / moment)
  • стилус (https // github.com / LearnBoost / stylus)
  • smoosh (https // github.com / fat / smoosh)
    … хотя я ищу в grunt (https // github.com / cowboy / grunt)
  • трассировка консоли (//github.com/LearnBoost/console-trace).

Нет, я не использую coffeescript.

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

(извините за странные ссылки, я слишком много n00b для переполнения стека, чтобы позволить мне публиковать так много)

16
задан oldbeamer 30 June 2009 в 01:40
поделиться

3 ответа

Хммм ... Я не разработчик iPhone, но ....

Не могли бы вы попробовать создать NSURLRequest с URL-адресом, который вы хотите загрузить? Затем вы можете установить соединение с помощью NSURLConnection.

NSURLConnection имеет метод делегата

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

, который будет передавать ответ от сервера. Обратите внимание, что если вы устанавливаете соединение через HTTP, ответ на самом деле будет иметь класс NSHTTPURLResponse. NSHTTPURLResponse может использоваться для получения статуса с помощью следующего метода экземпляра

- (NSInteger)statusCode

. NSURLConnection имеет другой метод делегата

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

, который можно использовать для получения данных из URL-соединения. Затем вы можете вручную загрузить данные в свой UIWebView, используя:

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL

Это похоже на тонну работы, но это можно сделать. Надеюсь, кто-нибудь другой предложит более простой способ, хотя я его не вижу.

11
ответ дан 30 November 2019 в 23:00
поделиться

К сожалению, в настоящее время кажется, что лучшим доступным вариантом является использование -stringByEvaluatingJavaScriptFromString: для запуска небольшого скрипта, который запрашивает у документа его код состояния.

-4
ответ дан 30 November 2019 в 23:00
поделиться

А как насчет реализации webViewDidFinishLoad: в вашем UIWebViewDelegate и использования запроса свойства UIWebView для доступа к интересующим вас заголовкам? Примерно так (непроверено):

- (void)webViewDidFinishLoad:(UIWebView *)webView {
  NSString* theStatus = [[webView request] valueForHTTPHeaderField:@"Status"];
}
-6
ответ дан 30 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: