2009-04-18 7 views

Répondre

2

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]; 
+0

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

+0

vous pouvez également utiliser JavaScript et le DOM pour modifier la page après qu'elle a été chargée avec document.write(). –

+0

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

0

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.

Questions connexes