La deuxième question est en fait plus facile de répondre. Regardez l' stringWithContentsOfURL:encoding:error:
méthode de NSString - il vous permet de passer une URL comme une instance de NSURL (qui peut facilement être instancié à partir d'NSString) et retourne une chaîne de caractères avec le contenu complet de la page à l'URL. Par exemple:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
Après l'exécution de ce code, googlePage
contiendra le code HTML www.google.com et error
contiendra toutes les erreurs rencontrées dans l'extraction. (Vous devriez vérifier le contenu de error
après l'extraction.)
Dans l'autre sens (à partir d'une UIWebView) est un peu plus compliqué, mais il est fondamentalement le même concept. Vous aurez à tirer sur la demande de la vue, puis faire le récupérer comme avant:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
EDIT: ces Deux méthodes prennent un gain de performance, cependant, car ils ne se le demander deux fois. Vous pouvez contourner ce problème en le saisissant par le contenu d'un actuellement chargé UIWebView à l'aide de son stringByEvaluatingJavascriptFromString:
méthode, comme tel:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Cela permettra de saisir le courant du contenu HTML de la vue à l'aide du Modèle d'Objet de Document, d'analyser le Javascript, puis le donner à vous comme un NSString* de HTML.
Une autre façon est de faire votre demande par programmation d'abord, puis de charger le UIWebView de ce que vous avez demandé. Disons que vous prenez le deuxième exemple ci-dessus, où vous avez NSString *page
comme le résultat d'un appel d' stringWithContentsOfURL:encoding:error:
. Vous pouvez ensuite pousser cette chaîne dans la vue web à l'aide de loadHTMLString:baseURL:
, en supposant que vous avez également eu lieu sur la NSURL vous avez demandé:
[yourWebView loadHTMLString:page baseURL:requestURL];
Je ne suis pas sûr, toutefois, si cela va exécuter Javascript présents dans la page que vous chargez (le nom de la méthode, loadHTMLString
, est quelque peu ambigu, et les documents ne sont pas en dire beaucoup à ce sujet).
Pour plus d'info: