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:
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
a été une bouée de sauvetage pour moi à plusieurs reprises maintenant. Il semble revenir du document autant que possible.si vous souhaitez extraire le contenu d'un UIWebView déjà chargé, -stringByEvaluatingJavaScriptFromString. Par exemple:
la source
Pour obtenir toutes les données brutes HTML (avec
<head>
et<body>
):la source
Notez que la chaîne NSString stringWithContentsOfURL signalera une chaîne user-agent totalement différente de celle de UIWebView effectuant la même demande. Donc, si votre serveur est conscient de l'agent utilisateur et renvoie un code HTML différent en fonction de la personne qui le demande, vous risquez de ne pas obtenir de résultats corrects de cette façon.
Notez également que ce qui
@"document.body.innerHTML"
précède n'affichera que ce qui est dans la balise body. Si vous utilisez,@"document.all[0].innerHTML"
vous obtiendrez à la fois la tête et le corps. Ce qui n'est toujours pas le contenu complet de l'UIWebView, car il ne récupérera pas les balises! Doctype ou html, mais c'est beaucoup plus proche.la source
Lire:-
Modifier:-
la source
Dans Swift v3:
la source
(Xcode 5 iOS 7) Exemple d'application universelle pour iOS 7 et Xcode 5. Il s'agit d'un projet / exemple open source situé ici: Lien vers SimpleWebView (exemple de code source et zip de projet)
la source
J'utilise une extension rapide comme celle-ci:
la source
vous devriez essayer ceci:
la source
UIWebView
obtenir du HTML depuis UIWebView`
définir HTML dans UIWebView
[obtenir / définir le HTML à partir de WKWebView]
la source