На второй вопрос проще ответить. Посмотрите на stringWithContentsOfURL:encoding:error:
метод NSString - он позволяет вам передавать URL-адрес как экземпляр NSURL (который может быть легко создан из NSString) и возвращает строку с полным содержимым страницы при этом URL. Например:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
После запуска этого кода googlePage
будет содержать HTML-код для www.google.com, а error
будет содержать все ошибки, обнаруженные при получении. (Вы должны проверить содержимое error
после извлечения.)
Переходить другим путем (из UIWebView) немного сложнее, но в основном это та же концепция. Вам придется вытащить запрос из представления, а затем выполнить выборку, как и раньше:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
РЕДАКТИРОВАТЬ: Однако оба эти метода наносят удар по производительности, так как они делают запрос дважды. Вы можете обойти это, извлекая контент из загруженного в данный момент UIWebView, используя метод stringByEvaluatingJavascriptFromString:
, например:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Это позволит получить текущее HTML-содержимое представления с использованием объектной модели документа, проанализировать JavaScript, а затем передать его как NSString * в HTML.
Другой способ - сначала выполнить программный запрос, а затем загрузить UIWebView из того, что вы запросили. Допустим, вы берете второй пример выше, где у вас есть NSString *page
в результате вызова stringWithContentsOfURL:encoding:error:
. Затем вы можете вставить эту строку в веб-представление, используя loadHTMLString:baseURL:
, предполагая, что вы также удерживаете запрашиваемый NSURL:
[yourWebView loadHTMLString:page baseURL:requestURL];
Я не уверен, однако, будет ли запускаться JavaScript, найденный на странице, которую вы загружаете (имя метода, loadHTMLString
, несколько двусмысленно, и документы не говорят об этом много).
Для получения дополнительной информации: