Muszę wyodrębnić zawartość tagu tytułu ze strony HTML wyświetlanej w UIWebView. Jaki jest najsolidniejszy sposób, aby to zrobić?
Wiem, że potrafię:
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
Jednak działa to tylko wtedy, gdy włączony jest javascript.
Ewentualnie mógłbym po prostu zeskanować tekst kodu HTML w celu znalezienia tytułu, ale wydaje się to nieco kłopotliwe i może okazać się kruche, jeśli autorzy strony wpadną w wir swojego kodu. Jeśli chodzi o to, jaka jest najlepsza metoda przetwarzania tekstu HTML w iPhone API?
Czuję, że zapomniałem o czymś oczywistym. Czy istnieje lepsza metoda niż te dwie opcje?
Aktualizacja:
Z odpowiedzi na to pytanie wynika: UIWebView: Can You Disable Javascript? wydaje się, że nie ma możliwości wyłączenia JavaScript w UIWebView. Dlatego powyższa metoda Javascript zawsze będzie działać.
źródło
Odpowiedzi:
Dla tych, którzy po prostu przewiń w dół, aby znaleźć odpowiedź:
To zawsze będzie działać, ponieważ nie ma możliwości wyłączenia JavaScript w UIWebView.
źródło
WKWebView
ma właściwość „title”, po prostu zrób to w ten sposób,Myślę, że nie
UIWebView
jest teraz odpowiedni.źródło
Jeśli włączona jest obsługa JavaScript, użyj tego: -
Jeśli JavaScript jest wyłączony, użyj tego: -
Użyłem +7 i -7 w NSMakeRange, aby wyeliminować długość
<title>
np. 7źródło
Edycja: właśnie widziałem, jak znalazłeś odpowiedź ... sheeeiiitttt
Dosłownie właśnie się tego nauczyłem! Aby to zrobić, nie musisz nawet wyświetlać go w UIWebView. (Ale ponieważ go używasz, możesz po prostu uzyskać adres URL bieżącej strony)
Tak czy inaczej, oto kod i jakieś (słabe) wyjaśnienie:
Mamy więc kod HTML, a teraz jak uzyskać tytuł? Cóż, w każdym dokumencie opartym na html tytuł jest sygnalizowany przez To jest tytuł, więc prawdopodobnie najłatwiejszą rzeczą do zrobienia jest wyszukanie tego ciągu htmlCode dla i dla oraz podciągnięcie go, aby uzyskać zawartość pomiędzy.
I to naprawdę wszystko! Zasadniczo, aby wyjaśnić wszystkie shenanigans zachodzące w docTitle, gdybyśmy utworzyli zakres po prostu mówiąc NSMakeRange (startRange.location, endRange.location), otrzymalibyśmy tytuł ORAZ tekst startString (czyli), ponieważ lokalizacja jest pierwszy znak ciągu. Aby to zrównoważyć, dodaliśmy po prostu długość łańcucha
Teraz pamiętaj, że ten kod nie jest testowany ... jeśli są jakieś problemy, może to być błąd ortograficzny lub że nie dodałem / nie dodałem wskaźnika, gdy nie powinienem.
Jeśli tytuł jest trochę dziwny i nie do końca poprawny, spróbuj pomieszać z NSMakeRange - mam na myśli dodawanie / odejmowanie różnych długości / lokalizacji ciągów - wszystko, co wydaje się logiczne.
Jeśli masz jakieś pytania lub są jakieś problemy, nie wahaj się zapytać. To moja pierwsza odpowiedź na tej stronie, więc przepraszam, jeśli jest trochę zdezorganizowana
źródło
Oto wersja Swift 4, na podstawie odpowiedzi tutaj
źródło
Nie mam do tej pory doświadczenia z przeglądaniem stron internetowych, ale wydaje mi się, że ustawia to tytuł jako tytuł strony, więc sugeruję, aby użyć kategorii w widoku internetowym i nadpisać ustawiacz dla self.title, aby dodać wiadomość do jeden z was sprzeciwi się lub zmodyfikuje jakąś właściwość, aby uzyskać tytuł.
Czy możesz mi spróbować powiedzieć, czy to działa?
źródło
Jeśli potrzebujesz go często w swoim kodzie, sugeruję dodanie funkcji do „rozszerzenia UIWebView” w ten sposób
alternatywnie lepiej jest użyć WKWebView.
Niestety nie jest dobrze obsługiwany w ARKit. Musiałem zrezygnować z WKWebView. Nie mogłem załadować strony internetowej do webView. Jeśli ktoś ma tutaj rozwiązanie tego problemu -> mam podobny problem, to bardzo by pomogło.
źródło