UIWebView에 표시된 HTML 페이지에서 제목 태그의 내용을 추출해야합니다. 그렇게하는 가장 강력한 방법은 무엇입니까?
나는 내가 할 수 있다는 것을 안다.
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
그러나 자바 스크립트가 활성화 된 경우에만 작동합니다.
또는 제목에 대한 HTML 코드의 텍스트를 스캔 할 수 있지만 약간 번거롭고 페이지 작성자가 코드에 이상한 점이 있으면 깨지기 쉽습니다. 그렇다면 iPhone API 내에서 html 텍스트를 처리하는 데 가장 좋은 방법은 무엇입니까?
나는 분명한 것을 잊었다 고 생각합니다. 이 두 가지 선택보다 더 나은 방법이 있습니까?
최신 정보:
이 질문에 대한 답변에서 다음과 같습니다. UIWebView : Javascript를 비활성화 할 수 있습니까? UIWebView에서 Javascript를 끄는 방법이없는 것 같습니다. 따라서 위의 자바 스크립트 방법이 항상 작동합니다.
답변
아래로 스크롤하여 답을 찾는 사람들을 위해 :
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
UIWebView에서 Javascript를 끄는 방법이 없으므로 항상 작동합니다.
답변
WKWebView
‘title’속성이 있습니다.
func webView(_ wv: WKWebView, didFinish navigation: WKNavigation!) {
title = wv.title
}
UIWebView
지금은 적당 하지 않다고 생각 합니다.
답변
자바 스크립트가 활성화 된 경우 다음을 사용하십시오.
NSString *theTitle=[webViewstringByEvaluatingJavaScriptFromString:@"document.title"];
자바 스크립트가 비활성화 된 경우 다음을 사용하십시오.
NSString * htmlCode = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.appcoda.com"] encoding:NSASCIIStringEncoding error:nil];
NSString * start = @"<title>";
NSRange range1 = [htmlCode rangeOfString:start];
NSString * end = @"</title>";
NSRange range2 = [htmlCode rangeOfString:end];
NSString * subString = [htmlCode substringWithRange:NSMakeRange(range1.location + 7, range2.location - range1.location - 7)];
NSLog(@"substring is %@",subString);
나는 <title>
7 의 길이를 제거하기 위해 NSMakeRange에서 +7과 -7을 사용했습니다.
답변
편집 : 당신이 답을 찾은 것을 보았습니다 … sheeeiiitttt
나는 문자 그대로 이것을 배웠다! 이를 위해 UIWebView에 표시하지 않아도됩니다. (하지만 사용하면서 현재 페이지의 URL을 얻을 수 있습니다)
어쨌든, 여기에 코드와 (약한) 설명이 있습니다 :
//create a URL which for the site you want to get the info from.. just replace google with whatever you want
NSURL *currentURL = [NSURL URLWithString:@"http://www.google.com"];
//for any exceptions/errors
NSError *error;
//converts the url html to a string
NSString *htmlCode = [NSString stringWithContentsOfURL:currentURL encoding:NSASCIIStringEncoding error:&error];
HTML 코드가 있는데 제목을 어떻게 얻습니까? 글쎄, 모든 HTML 기반 문서에서 제목은 This Is the Title로 표시됩니다. 아마도 가장 쉬운 방법은 htmlCode 문자열을 for 및 for 및 하위 문자열로 검색하여 그 사이에 물건을 가져 오는 것입니다.
//so let's create two strings that are our starting and ending signs
NSString *startPoint = @"<title>";
NSString *endPoint = @"</title>";
//now in substringing in obj-c they're mostly based off of ranges, so we need to make some ranges
NSRange startRange = [htmlCode rangeOfString:startPoint];
NSRange endRange = [htmlCode rangeOfString:endPoint];
//so what this is doing is it is finding the location in the html code and turning it
//into two ints: the location and the length of the string
//once we have this, we can do the substringing!
//so just for easiness, let's make another string to have the title in
NSString *docTitle = [htmlString substringWithRange:NSMakeRange(startRange.location + startRange.length, endRange.location)];
NSLog(@"%@", docTitle);
//just to print it out and see it's right
그게 다야! 기본적으로 docTitle에서 진행되는 모든 shenanigans를 설명하기 위해 NSMakeRange (startRange.location, endRange.location)라고 말하면 범위를 만들면 제목과 startString의 텍스트를 얻습니다. 문자열의 첫 문자 이를 오프셋하기 위해 문자열 길이를 추가했습니다.
이제이 코드는 테스트되지 않았다는 것을 명심하십시오. 문제가있을 경우 철자 오류 일 수도 있고, 예상치 않은 포인터를 추가하지 않았을 수도 있습니다.
제목이 조금 이상하고 완전히 옳지 않은 경우 NSMakeRange로 엉망이됩니다. 나는 문자열의 길이 / 위치가 다른 것을 더하거나 빼는 것처럼 논리적으로 보이는 것을 의미합니다.
궁금한 점이 있거나 문제가 있으면 언제든지 문의하십시오. 이 웹 사이트에 대한 첫 번째 답변이므로 약간 혼란 스럽다면 미안합니다.
답변
여기에 답변을 기반으로 Swift 4 버전이 있습니다.
func webViewDidFinishLoad(_ webView: UIWebView) {
let theTitle = webView.stringByEvaluatingJavaScript(from: "document.title")
}
답변
나는 지금까지 웹뷰에 대한 경험이 없지만, 제목을 페이지 제목으로 설정한다고 생각합니다. 따라서 웹뷰에서 카테고리를 사용하고 self.title에 대한 세터를 덮어 써서 메시지를 추가하는 것이 좋습니다 당신 중 하나는 제목을 얻기 위해 일부 속성을 반대하거나 수정합니다.
작동하는지 알려주시겠습니까?
답변
코드에서 자주 필요하면 다음과 같이 “확장 UIWebView”에 기능을 추가하는 것이 좋습니다.
extension UIWebView {
func title() -> String{
let title: String = self.stringByEvaluatingJavaScript(from: "document.title")!
return title
}
또는 WKWebView를 사용하는 것이 좋습니다.
불행히도 ARKit에서는 잘 지원되지 않습니다. WKWebView를 포기해야했습니다. 웹 사이트를 webView에로드 할 수 없었습니다. 누군가이 문제에 대한 해결책 이 여기에 있다면 -> 비슷한 문제가 있으면 크게 도움이 될 것입니다.