Ich muss den Inhalt des Titel-Tags aus einer HTML-Seite extrahieren, die in einer UIWebView angezeigt wird. Was ist das robusteste Mittel dazu?
Ich weiß, dass ich tun kann:
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
Dies funktioniert jedoch nur, wenn Javascript aktiviert ist.
Alternativ könnte ich einfach den Text des HTML-Codes nach dem Titel durchsuchen, aber das fühlt sich etwas umständlich an und könnte sich als fragil erweisen, wenn die Autoren der Seite mit ihrem Code verrückt werden. Was ist die beste Methode, um den HTML-Text in der iPhone-API zu verarbeiten?
Ich habe das Gefühl, etwas Offensichtliches vergessen zu haben. Gibt es eine bessere Methode als diese beiden Möglichkeiten?
Aktualisieren:
Aus der Antwort auf diese Frage folgt: UIWebView: Können Sie Javascript deaktivieren? Es scheint keine Möglichkeit zu geben, Javascript in UIWebView zu deaktivieren. Daher funktioniert die oben beschriebene Javascript-Methode immer.
quelle
Antworten:
Für diejenigen, die nur nach unten scrollen, um die Antwort zu finden:
Dies funktioniert immer, da Javascript in UIWebView nicht deaktiviert werden kann.
quelle
WKWebView
hat 'title' Eigenschaft, mach es einfach so,Ich denke nicht, dass
UIWebView
es momentan geeignet ist.quelle
Wenn Javascript aktiviert ist Verwenden Sie Folgendes: -
Wenn Javascript deaktiviert ist Verwenden Sie Folgendes: -
Ich habe +7 und -7 in NSMakeRange verwendet, um die Länge von
<title>
dh 7 zu eliminierenquelle
Edit: habe gerade gesehen, dass du die Antwort herausgefunden hast ... sheeeiiitttt
Ich habe das buchstäblich gerade gelernt! Dazu muss es nicht einmal in UIWebView angezeigt werden. (Aber während Sie es verwenden, können Sie einfach die URL der aktuellen Seite abrufen.)
Wie auch immer, hier ist der Code und einige (schwache) Erklärungen:
Wir haben also den HTML-Code. Wie bekommen wir nun den Titel? Nun, in jedem HTML-basierten Dokument wird der Titel durch This Is the Title signalisiert. Daher ist es wahrscheinlich am einfachsten, diesen HTMLCode-String nach und für und Teilzeichenfolgen zu durchsuchen, damit wir das Zeug dazwischen bekommen.
Und das war's auch schon! Um also alle im docTitle ablaufenden Spielereien zu erklären, würden wir, wenn wir einen Bereich nur mit NSMakeRange (startRange.location, endRange.location) erstellen würden, den Titel UND den Text von startString (was ist) erhalten, da der Speicherort von ist das erste Zeichen der Zeichenfolge. Um dies auszugleichen, haben wir nur die Länge der Zeichenfolge hinzugefügt
Denken Sie jetzt daran, dass dieser Code nicht getestet wird. Wenn es Probleme gibt, kann es sich um einen Rechtschreibfehler handeln oder darum, dass ich keinen Zeiger hinzugefügt habe, als ich es nicht sollte.
Wenn der Titel etwas seltsam und nicht ganz richtig ist, versuchen Sie, mit dem NSMakeRange herumzuspielen - ich meine, Sie möchten verschiedene Längen / Positionen der Zeichenfolgen addieren / subtrahieren - alles, was logisch erscheint.
Wenn Sie Fragen haben oder Probleme haben, können Sie diese gerne stellen. Dies ist meine erste Antwort auf dieser Website. Es tut mir leid, wenn sie etwas unorganisiert ist
quelle
Hier ist die Swift 4-Version, basierend auf der Antwort hier
quelle
Ich habe bisher noch keine Erfahrung mit Webansichten, aber ich glaube, es setzt den Titel auf den Seitentitel. Ein Trick, den ich vorschlage, besteht darin, eine Kategorie in der Webansicht zu verwenden und den Setter für self.title zu überschreiben, damit Sie eine Nachricht hinzufügen Einer von Ihnen widerspricht oder ändert eine Eigenschaft, um den Titel zu erhalten.
Könnten Sie versuchen, mir zu sagen, ob es funktioniert?
quelle
Wenn Sie es häufig in Ihrem Code benötigen, empfehle ich Ihnen, der "Erweiterung UIWebView" wie folgt eine Funktion hinzuzufügen
Alternativ ist es besser, WKWebView zu verwenden.
Leider wird es in ARKit nicht gut unterstützt. Ich musste WKWebView aufgeben. Ich konnte die Website nicht in die Webansicht laden. Wenn hier jemand eine Lösung für dieses Problem hat -> ich habe ein ähnliches Problem, würde es sehr helfen.
quelle