J'ai besoin d'extraire le contenu de la balise de titre d'une page HTML affichée dans une UIWebView. Quel est le moyen le plus robuste de le faire?
Je sais que je peux faire:
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
Cependant, cela ne fonctionne que si javascript est activé.
Sinon, je pourrais simplement scanner le texte du code HTML pour le titre, mais cela semble un peu fastidieux et pourrait s'avérer fragile si les auteurs de la page devenaient bizarres avec leur code. Dans ce cas, quelle est la meilleure méthode à utiliser pour traiter le texte html dans l'API iPhone?
J'ai l'impression d'avoir oublié quelque chose d'évident. Existe-t-il une meilleure méthode que ces deux choix?
Mettre à jour:
Suite de la réponse à cette question: UIWebView: Pouvez-vous désactiver Javascript? il ne semble y avoir aucun moyen de désactiver Javascript dans UIWebView. Par conséquent, la méthode Javascript ci-dessus fonctionnera toujours.
la source
Réponses:
Pour ceux qui font défiler vers le bas pour trouver la réponse:
Cela fonctionnera toujours car il n'y a aucun moyen de désactiver Javascript dans UIWebView.
la source
WKWebView
a la propriété 'title', faites-le comme ça,Je ne pense pas que ce
UIWebView
soit approprié pour le moment.la source
Si Javascript activé, utilisez ceci: -
Si Javascript désactivé, utilisez ceci: -
J'ai utilisé +7 et -7 dans NSMakeRange pour éliminer la longueur de
<title>
ie 7la source
Edit: je viens de voir que vous avez trouvé la réponse ... sheeeiiitttt
Je viens de l'apprendre littéralement! Pour ce faire, vous n'avez même pas besoin de l'afficher dans UIWebView. (Mais comme vous l'utilisez, vous pouvez simplement obtenir l'URL de la page actuelle)
Quoi qu'il en soit, voici le code et quelques (faibles) explications:
Nous avons donc le code HTML, maintenant comment obtenir le titre? Eh bien, dans chaque document basé sur html, le titre est signalé par This Is the Title. Donc, la chose la plus simple à faire est probablement de rechercher cette chaîne htmlCode pour, et pour, et de la sous-traiter afin que nous obtenions les choses entre les deux.
Et c'est vraiment ça! Donc, fondamentalement, pour expliquer toutes les manigances qui se produisent dans le docTitle, si nous avons créé une plage simplement en disant NSMakeRange (startRange.location, endRange.location), nous obtiendrions le titre ET le texte de startString (ce qui est) parce que l'emplacement est par le premier caractère de la chaîne. Donc, pour compenser cela, nous avons simplement ajouté la longueur de la chaîne
Maintenant, gardez à l'esprit que ce code n'est pas testé ... s'il y a des problèmes, cela peut être une faute d'orthographe, ou que je n'ai pas / ai ajouté un pointeur alors que je n'étais pas censé le faire.
Si le titre est un peu bizarre et pas tout à fait correct, essayez de jouer avec le NSMakeRange - je veux dire comme ajouter / soustraire différentes longueurs / emplacements des chaînes - tout ce qui semble logique.
Si vous avez des questions ou si vous rencontrez des problèmes, n'hésitez pas à les poser. C'est ma première réponse sur ce site, donc désolé si c'est un peu désorganisé
la source
Voici la version Swift 4, basée sur la réponse ici
la source
Je n'ai pas d'expérience avec les vues Web jusqu'à présent, mais je pense que cela définit son titre sur le titre de la page, donc, une astuce que je suggère est d'utiliser une catégorie sur la vue Web et d'écraser le setter pour self.title afin d'ajouter un message à l'un de vous s'oppose ou modifie une propriété pour obtenir le titre.
Pouvez-vous essayer de me dire si cela fonctionne?
la source
Si vous en avez besoin fréquemment dans votre code, je vous suggère d'ajouter une fonction dans "extension UIWebView" comme ceci
sinon, il est préférable d'utiliser WKWebView.
Malheureusement, ce n'est pas bien pris en charge dans ARKit. J'ai dû abandonner WKWebView. Je n'ai pas pu charger le site Web dans la vue Web. Si quelqu'un a une solution à ce problème ici -> j'ai un problème similaire, cela aiderait grandement.
la source