HTML 페이지 제목을 UI WebView에 표시하는 방법
UI Web View에 표시되는 HTML 페이지에서 타이틀 태그의 내용을 추출해야 합니다.그렇게 하는 가장 강력한 방법은 무엇입니까?
제가 할 수 있는 일:
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
단, javascript가 활성화 되어 있는 경우에만 동작합니다.
또는 HTML 코드의 텍스트를 스캔하여 제목을 찾을 수도 있지만, 조금 번거롭고, 페이지 작성자가 코드를 가지고 장난을 치면 깨질 수도 있습니다.그렇다면 iPhone API 내에서 html 텍스트를 처리하는 가장 좋은 방법은 무엇입니까?
뭔가 명백한 것을 잊어버린 것 같아요.이 두 가지 선택보다 더 좋은 방법이 있을까요?
업데이트:
UI Web View: Javascript를 비활성화할 수 있습니까?UI WebView에서 Javascript를 해제할 방법이 없는 것 같습니다.따라서 위의 Javascript 메서드는 항상 작동합니다.
아래쪽으로 스크롤하여 답을 찾는 사용자:
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
UI Web View 에서는 Javascript 를 해제할 수 없기 때문에, 이 조작은 항상 유효합니다.
WKWebView
그냥 이렇게 하면 돼요.
func webView(_ wv: WKWebView, didFinish navigation: WKNavigation!) {
title = wv.title
}
난 그렇게 생각하지 않아.UIWebView
지금으로서는 적당합니다.
Javascript가 활성화된 경우 다음을 사용합니다.
NSString *theTitle=[webViewstringByEvaluatingJavaScriptFromString:@"document.title"];
Javascript를 사용할 수 없는 경우 다음을 사용합니다.
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);
NSMakeRange에서 +7과 -7을 사용하여 다음 길이를 없앴습니다.<title>
예: 7
편집: 방금 답을 찾은 것을 보았습니다.셧
나 말 그대로 이거 막 배웠어!이를 위해 UI Web View에 표시할 필요도 없습니다(단, 사용 중 현재 페이지의 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 문자열에서 및 을 검색하여 그 사이에 내용을 가져오는 것입니다.
//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에서 진행되는 모든 셰나니건을 설명하자면 NSMakeRange(startRange.location, endRange.location)라고 하는 것만으로 범위를 설정하면 startString(즉, startString)의 제목과 텍스트(즉, 위치가 문자열의 첫 번째 문자에 의한 것이기 때문에)를 얻을 수 있습니다.그래서 우리는 그것을 상쇄하기 위해 끈의 길이를 더했다.
이 코드는 테스트되지 않았습니다.맞춤법 오류일 수도 있고, 포인터를 추가하지 않았을 수도 있습니다.
제목이 조금 이상하고 완전히 올바르지 않은 경우 NSMake Range를 만지작거려 보십시오.즉, 문자열의 길이/장소를 다르게 추가/축소하는 등 논리적으로 보이는 모든 것을 시도해 보십시오.
궁금한 점이나 문제가 있으면 언제든지 물어보세요.이 웹사이트에서의 첫 번째 답변입니다.조금 어수선했다면 죄송합니다.
여기 Swift 4 버전이 있습니다.여기 답변을 바탕으로 합니다.
func webViewDidFinishLoad(_ webView: UIWebView) {
let theTitle = webView.stringByEvaluatingJavaScript(from: "document.title")
}
아직 웹뷰에 대한 경험은 없지만 페이지 제목으로 설정되어 있다고 생각하기 때문에 webview의 카테고리를 사용하여 self.title의 setter를 덮어쓰는 것이 좋습니다.그러면 오브젝트 중 하나에 메시지를 추가하거나 속성을 변경하여 제목을 취득할 수 있습니다.
효과가 있는지 말씀해 주시겠습니까?
코드에 자주 필요한 경우 다음과 같이 "확장 UI Web View"에 펑크를 추가하는 것이 좋습니다.
extension UIWebView {
func title() -> String {
let title: String = self.stringByEvaluatingJavaScript(from: "document.title")!
return title
}
}
또는 WKWeb View를 사용하는 것이 좋습니다.
안타깝게도 ARKit에서는 잘 지원되지 않습니다.나는 WKWebView를 포기해야만 했다.웹 사이트를 webView에 로드할 수 없었습니다.만약 누군가가 이 문제에 대한 해결책을 가지고 있다면 -> 저는 더 큰 문제를 안고 있습니다.
언급URL : https://stackoverflow.com/questions/2275876/how-to-get-the-title-of-a-html-page-displayed-in-uiwebview
'programing' 카테고리의 다른 글
어레이와 리스트: 언제 사용할까요? (0) | 2023.04.22 |
---|---|
액티브한 화면 치수를 취득하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
Excel VBA 디렉토리가 있는지 확인 오류 (0) | 2023.04.22 |
단순 vba 코드가 실행 시간 오류 91 개체 변수를 제공하거나 블록이 설정되지 않은 경우 (0) | 2023.04.22 |
셸 프로그래밍에서 $(command)와 command의 차이점은 무엇입니까? (0) | 2023.04.22 |