J'ai un NSString avec des liens Web. J'ai besoin de trouver tous les liens web dans la chaîne commençant par http: //. Quelle est la meilleure façon de procéder?Recherche de liens Web dans un NSString
Répondre
La méthode
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
vous donne la possibilité d'exécuter JavaScript personnalisé. Le JavaScript pourrait avoir accès au DOM, si c'est le cas, il devrait être simple d'extraire toutes les balises d'ancrage et de les retourner.
Bien sûr, je n'ai écrit que la plus petite des applications iPhone et je ne suis pas très familier avec JavaScript ou le DOM, donc je pourrais être loin de la base ici.
regardant les DOM et JavaScript, il peut être aussi facile que
anchors = [htmlview_object stringByEvaluatingJavaScriptFromString @"document.anchors"];
mais, encore une fois, je ne sais pas vraiment ce que je parle.
Essayez ceci:
javascript = @"function return_links() {\n"
" var a = new Array;\n"
" for (i = 0; i < document.anchors.length; i++) {\n"
" a.push(document.anchors[i].href);\n"
" }\n"
" return a.join(\"\\n\");\n"
"}\n"
"return_links();\n";
links = [htmlview_object stringByEvaluatingJavaScriptFromString javascript];
La meilleure façon est de trouver des liens dans un NSString un HTML Parser, voir Parsing HTML on the iPhone. Si vous devez utiliser une regex (et voir Can you provide some examples of why it is hard to parse XML and HTML with a regex? pour pourquoi vous ne devriez pas), PCRE semble être disponible pour l'iPhone. Une regex commune et défectueuse pour les liens est /href="(.*?)"/
. Bien sûr, le meilleur analyseur disponible est probablement le widget de visualisation html natif, et puisqu'il vous donne la possibilité d'exécuter JavaScript (voir ma réponse originale à votre question initiale), vous devriez être capable d'extraire les ancres du DOM. (document.anchors) et écrire/réécrire tout ce dont vous avez besoin pour utiliser document.write() et les autres méthodes DOM.
- 1. Recherche inversée de liens Spotify
- 2. Recherche et suppression de liens symboliques défectueux dans Windows
- 3. Liens entre projets dans Project Web Access
- 4. liens type de recherche dans Yahoo - comment mettre en œuvre un comportement similaire
- 5. Rechercher des liens Web CorelDraw
- 6. Vérifier l'existence d'un mot dans un NSString
- 7. Service Web de recherche d'entreprise dans SharePoint
- 8. Interface Web Mercurial Liens brisés
- 9. NSString dans NSData
- 10. NSString tokenize dans Objective-C
- 11. couleur NSString
- 12. Comment dessiner un NSString à un angle?
- 13. Comment trouver tous les liens/pages sur un site Web
- 14. Création de liens dans Flex
- 15. Nombre de caractères dans NSString ou NSMutableString?
- 16. Insertion d'un NSString dans pathForResource de NSBundle?
- 17. NSString indexOf dans Objective-C
- 18. Parse Plist (NSString) dans NSDictionary
- 19. Flipped NSString dessin dans CGContext
- 20. Web crawler liens/page logique en PHP
- 21. Liens hypertexte dans AfxMessageBox
- 22. Comment utiliser NSDateFormatter pour formater un NSString?
- 23. Comment ajouter 'dans NSString dans ios sdk?
- 24. moteur de recherche utilisant développeur web 2008
- 25. Covert NSString à NSDate dans un fuseau horaire différent
- 26. Comment déterminer l'ordre des sous-chaînes dans un NSString?
- 27. jetant un NSString à carboniser problème
- 28. Comment convertir un int en NSString?
- 29. Liens dans Ramaze avec un/r helpers
- 30. Déterminez si un chemin dans un NSString est dans un répertoire ou un fichier?
Merci. J'ai changé la question puisque je peux rechercher une chaîne plutôt que UIWebView. Je dois ajouter à ces chaînes avant qu'elles ne rentrent dans l'UIWebView. – 4thSpace
vous pouvez également utiliser JavaScript et le DOM pour modifier la page après qu'elle a été chargée avec document.write(). –
J'ai essayé la technique que vous avez mentionnée. ancres ne semble pas avoir de chaîne. Dans le débogueur, Résumé est vide. Il a une adresse mémoire valide mais pas sûr de ce qu'il y a dedans. – 4thSpace