UI WebView에서 HTML 컨텐츠 읽기
로드된 웹 페이지의 원시 HTML 내용을 읽을 수 있습니까?UIWebView
?
그렇지 않은 경우 iPhone SDK의 웹 페이지에서 원시 HTML 컨텐츠를 가져올 수 있는 다른 방법이 있습니까(예: .NET과 동등한 것).WebClient::openRead
)?
두 번째 질문은 사실 대답하기가 더 쉽습니다.NSString 방법을 확인합니다. 이 방법을 사용하면 URL을 NSURL의 인스턴스로 전달하고(NSString에서 쉽게 인스턴스화할 수 있음) 해당 URL에 페이지의 전체 내용이 포함된 문자열을 반환할 수 있습니다.예:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
이 코드를 실행한 후,googlePage
www.google.com 용 HTML을 포함합니다.error
가져오기에서 발생한 모든 오류를 포함합니다. (사용자는 의 내용을 확인해야 합니다.error
가져오기 후.)
(UI WebView에서) 반대 방향으로 가는 것은 조금 더 까다롭지만 기본적으로 같은 개념입니다.보기에서 요청을 가져온 다음 이전과 같이 가져오기를 수행해야 합니다.
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
편집: 그러나 두 가지 방법 모두 요청을 두 번 수행하므로 성능이 저하됩니다.현재 로드된 UI WebView에서 다음을 사용하여 컨텐츠를 가져와 이 문제를 해결할 수 있습니다.stringByEvaluatingJavascriptFromString:
다음과 같은 방법:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
이렇게 하면 문서 개체 모델을 사용하여 보기의 현재 HTML 내용을 가져오고 JavaScript를 구문 분석한 다음 HTML의 NSString*으로 제공됩니다.
다른 방법은 먼저 요청을 프로그래밍 방식으로 수행한 다음 요청한 내용에서 UI WebView를 로드하는 것입니다.위의 두 번째 예를 예로 들어 보겠습니다.NSString *page
에의 방문의 결과로stringWithContentsOfURL:encoding:error:
그런 다음 다음 다음을 사용하여 해당 문자열을 웹 보기로 밀어넣을 수 있습니다.loadHTMLString:baseURL:
요청한 NSURL도 보유하고 있다고 가정합니다.
[yourWebView loadHTMLString:page baseURL:requestURL];
그러나 로드하는 페이지에서 발견된 JavaScript를 실행할 수 있을지는 잘 모르겠습니다(메소드 이름,loadHTMLString
다소 모호하고, 문서에서는 이에 대해 별로 언급하지 않습니다.)
자세한 정보:
이미 로드된 UI WebView의 내용을 추출하려면 -stringByJavaScriptFromString을 사용합니다.예:
NSString *html = [webView stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"];
전체 HTML 원시 데이터를 가져오려면 다음을 사용합니다.<head>
그리고.<body>
):
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
내용이 다음과 같은 NS 문자열에 주의하십시오.URL은 동일한 요청을 하는 UI WebView와 전혀 다른 사용자-에이전트 문자열을 보고합니다.따라서 서버가 사용자-에이전트를 인식하고 요청하는 사용자에 따라 다른 html을 다시 발송하는 경우 올바른 결과를 얻지 못할 수 있습니다.
한참고는 다음과 .@"document.body.innerHTML"
위에서 언급한 내용은 본문 태그에만 표시됩니다.사용하는 경우@"document.all[0].innerHTML"
당신은 머리와 몸을 둘 다 갖게 될 것입니다.태그를 더 doctype 또는 html 태그를 반환하지 않기 때문에 UI WebView의 완전한 내용은 아니지만 훨씬 더 가깝습니다.
읽기:-
NSString *html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent"];
NSLog(html);
수정하는 방법:-
html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent=''"];
Swift v3의 경우:
let doc = webView.stringByEvaluatingJavaScript(from: "document.documentElement.outerHTML")
(Xcode 5 iOS 7) iOS 7 및 Xcode 5용 범용 앱의 예.SimpleWebView 링크(Project Zip 및 소스 코드 예제)에 있는 오픈 소스 프로젝트입니다.
나는 다음과 같은 빠른 확장을 사용합니다.
extension UIWebView {
var htmlContent:String? {
return self.stringByEvaluatingJavaScript(from: "document.documentElement.outerHTML")
}
}
당신은 이것을 시도해야 합니다.
document.documentElement.outerHTML
UI 웹 보기
UIWebView에서 HTML 가져오기'
let content = uiWebView.stringByEvaluatingJavaScript(from: "document.body.innerHTML")
HTML을 UI로 설정WebView
//Do not forget to extend a class from `UIWebViewDelegate` and nil the delegate
func someFunction() {
let uiWebView = UIWebView()
uiWebView.loadHTMLString("<html><body></body></html>", baseURL: nil)
uiWebView.delegate = self as? UIWebViewDelegate
}
func webViewDidFinishLoad(_ webView: UIWebView) {
//ready to be processed
}
언급URL : https://stackoverflow.com/questions/992348/reading-html-content-from-a-uiwebview
'programing' 카테고리의 다른 글
iPhone/iPad용 Javascript 스크롤 이벤트? (0) | 2023.06.04 |
---|---|
iOS 8을 사용하여 iPad에서 UIAlert 컨트롤러를 올바르게 표시하기 (0) | 2023.06.04 |
SQL: 첫 글자만 대문자로 표시 (0) | 2023.06.04 |
활성 레코드를 복제하는 가장 쉬운 방법은 무엇입니까? (0) | 2023.06.04 |
ActiveRecord 콜백 실행을 방지하려면 어떻게 해야 합니까? (0) | 2023.06.04 |