La lecture du contenu HTML à partir d'une UIWebView
Est-il possible de lire les raw du contenu HTML d'une page web qui a été chargé dans une UIWebView
?
Si non, est-il une autre façon de s'en sortir raw contenu HTML d'une page web dans le SDK de l'iPhone (comme un équivalent de la .NET WebClient::openRead
)?
Vous devez vous connecter pour publier un commentaire.
La deuxième question est en fait plus facile de répondre. Regardez les
stringWithContentsOfURL:codage:erreur:
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:Après l'exécution de ce code,
googlePage
contiendra le code HTML http://www.google.com eterror
contiendra toutes les erreurs rencontrées dans l'extraction. (Vous devriez vérifier le contenu deerror
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 le demande de la vue, puis faire le récupérer comme avant:
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, en tant que tel:Ce saisira 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 àstringWithContentsOfURL:encoding:error:
. Vous pouvez ensuite pousser cette chaîne dans la vue web à l'aide deloadHTMLString:baseURL:
, en supposant que vous avez également eu lieu sur la NSURL vous avez demandé: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:
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
a été une bouée de sauvetage pour moi à plusieurs reprises. Il semble renvoyer à partir du document autant que possible.si vous voulez extraire le contenu d'un déjà-chargé UIWebView, -stringByEvaluatingJavaScriptFromstring. Par exemple:
Pour obtenir le code HTML des données brutes (avec
<head>
et<body>
):Noter que le NSString stringWithContentsOfURL fera rapport totalement différente d'une chaîne user-agent de la UIWebView faire la même demande. Donc, si votre serveur est user-agent conscient, et de l'envoi de retour html différent selon qui les demande, vous ne pouvez pas obtenir de bons résultats de cette façon.
Également de noter que la
@"document.body.innerHTML"
mentionné ci-dessus va afficher uniquement 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 pas encore le contenu complet de la UIWebView, car il n'obtiendrez pas la !doctype ou des balises html, mais il est beaucoup plus proche.À lire:-
À modifier:-
Dans Swift v3:
(Xcode 5 iOS 7) Universal Application pour iOS 7 et Xcode 5. C'est un projet open source /exemple trouve ici: Lien vers SimpleWebView (Projet Zip et un Exemple de Code Source)
- Je utiliser une rapide extension comme ceci:
vous devriez essayer ceci: