2009-04-18 8 views

Antwort

2

Verfahren

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script 

gibt Ihnen die Möglichkeit, benutzerdefinierte JavaScript auszuführen. Das JavaScript hat möglicherweise Zugriff auf das DOM, wenn es also einfach sein sollte, alle Anchor-Tags zu extrahieren und zurückzugeben.

Natürlich habe ich nur die kleinsten iPhone Apps geschrieben und bin nicht sehr vertraut mit JavaScript oder dem DOM, also könnte ich hier weit weg von der Basis sein.

Mit Blick auf dem DOM und JavaScript kann es so einfach wie

anchors = [htmlview_object stringByEvaluatingJavaScriptFromString @"document.anchors"]; 

, aber auch hier sein, ich habe nicht wirklich wissen, was ich rede.

Versuchen Sie folgendes:

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

Danke. Ich habe die Frage geändert, da ich eine Zeichenfolge anstelle von UIWebView suchen kann. Ich muss an diese Zeichenfolgen anhängen, bevor sie in das UIWebView gehen. – 4thSpace

+0

Sie können auch JavaScript und das DOM verwenden, um die Seite zu ändern, nachdem sie mit document.write() geladen wurde. –

+0

Ich habe die Technik ausprobiert, die Sie erwähnt haben. Anker scheint keine Schnur zu haben. Im Debugger ist Zusammenfassung leer. Es hat eine gültige Speicheradresse, aber nicht sicher, was drin ist. – 4thSpace

0

Der beste Weg, um Links in einem NSString ein HTML-Parser finden Parsing HTML on the iPhone zu finden ist. Wenn Sie eine Regex verwenden müssen (und Can you provide some examples of why it is hard to parse XML and HTML with a regex? sehen, warum Sie nicht sollten), scheint PCRE für das iPhone verfügbar zu sein. Eine häufige und fehlerbehaftete Regex für Links ist /href="(.*?)"/.

Natürlich ist der beste verfügbare Parser wahrscheinlich das native HTML-Anzeige-Widget, und da Sie JavaScript ausführen können (siehe meine ursprüngliche Antwort auf Ihre ursprüngliche Frage), sollten Sie die Anker aus dem DOM extrahieren können (document.anchors) und schreibe/schreibe was immer du brauchst um document.write() und die anderen DOM Methoden zu benutzen.