La deuxième question est en fait plus facile à répondre. Regardez la stringWithContentsOfURL:encoding:error:
méthode de NSString - elle vous permet de passer une URL en tant qu'instance de NSURL (qui peut facilement être instanciée à partir de NSString) et renvoie une chaîne avec le contenu complet de la page à cette 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 avoir exécuté ce code, googlePage
contiendra le code HTML de www.google.com et error
contiendra toutes les erreurs rencontrées lors de la récupération. (Vous devriez vérifier le contenu de error
après la récupération.)
Aller dans l'autre sens (à partir d'un UIWebView) est un peu plus délicat, mais c'est fondamentalement le même concept. Vous devrez extraire la requête de la vue, puis effectuer la récupération comme avant:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
EDIT: Ces deux méthodes ont un impact négatif sur les performances, car elles font la demande deux fois. Vous pouvez contourner ce problème en récupérant le contenu d'une UIWebView actuellement chargée à l'aide de sa stringByEvaluatingJavascriptFromString:
méthode, en tant que telle:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Cela récupérera le contenu HTML actuel de la vue en utilisant le modèle d'objet de document, analysera le JavaScript, puis vous le donnera sous forme de NSString * de HTML.
Une autre méthode consiste à effectuer d'abord votre demande par programme, puis à charger l'UIWebView à partir de ce que vous avez demandé. Disons que vous prenez le deuxième exemple ci-dessus, où vous avez NSString *page
à la suite d'un appel à stringWithContentsOfURL:encoding:error:
. Vous pouvez ensuite pousser cette chaîne dans la vue Web en utilisant loadHTMLString:baseURL:
, en supposant que vous ayez également conservé la NSURL que vous avez demandée:
[yourWebView loadHTMLString:page baseURL:requestURL];
Je ne suis pas sûr, cependant, si cela exécutera JavaScript trouvé dans la page que vous chargez (le nom de la méthode,, loadHTMLString
est quelque peu ambigu, et les documents n'en disent pas grand chose).
Pour plus d'informations: