iOS UIWebView 에서 웹 제목 을 가 져 올 수 없 는 해결 방법
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// html
NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
이 문제 가 발생 하면 나 는 먼저 코드 의 문제 인지 아 닌 지 를 확인 하고 분석 한 결과 코드 가 바 뀌 지 않 았 지만 이번 에는 웹 페이지 의 제목 을 얻 지 못 하 는 것 이 매우 이상 하 다.검색 분석 을 통 해 문 제 는 이 버 전에 서 전단 인원 이 웹 페이지 의 제목 을 비동기 동작 에 설정 하여 UIWebView 가 웹 페이지 를 불 러 오 는 것 이 완 료 된 후에 프 록 시 방법 인 webView Did FinishLoad:에서 제목 을 바로 가 져 올 수 없습니다.제목 을 가 져 오 는 방법 은 비동기 이기 때문에 웹 페이지 를 불 러 오 면 이 프 록 시 방법 을 호출 합 니 다.그 때 웹 페이지 title 은 아직 값 이 없 었 습 니 다.타이틀 값 을 가 져 올 수 없습니다.다음은 웹 페이지 비동기 로 title 을 가 져 오 는 코드 입 니 다.jQuery 와 Ajax 기술 을 사용 하여 다른 단계 로 title 을 가 져 옵 니 다.
$.ajax({
url: remoteur+'/api/innerMessageApi/noticeMessage.htm?callBackFunc=xx',
type: 'get',
dataType: 'jsonp',
jsonpCallback:"xx",
data: {msgId: msgId},
success: function(res){
console.log(res);
if ( res.successFlag == 'Y' ){
content = res.content;
title = res.title;
}
},
complete:function(res){
document.title = title;
$('body').append(content);
}
})
이 문제 가 발생 했 을 때 마침 프로젝트 가 출시 되 는 그날 밤 에 단체 야근 을 할 때 이 문제 에 부 딪 혀 그날 밤 에 깊 은 상 처 를 받 은 것 을 느 꼈 다.자,잡담 은 그만 하고 해결책 을 소개 하 겠 습 니 다.
방법 1
iOS 방면 의 해결 방법 만 고려한다 면 title 을 지연 시 키 는 것 일 수 있 습 니 다.구체 적 으로 는 webView Did FinishLoad:에서 document.title 을 지연 시 켜 제목 을 얻 는 것 입 니 다.해결 할 수 있 지만 위험 합 니 다.웹 페이지 에서 제목 을 얻 는 것 은 비동기 적 이 고 다른 단계 의 시간 이 확실 하지 않 기 때문에 지연 시간 도 확실 하지 않 습 니 다.지연 시간 을 늘 릴 수 있 지만,하지만 완벽 한 해결책 은 아 닐 까?
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)),
dispatch_get_main_queue(), ^{
self.title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
});
방법 2웹 페이지 엔 드 를 고려 하면 웹 페이지 에서 title 을 가 져 오 는 비동기 작업 을 동기 화 작업 으로 바 꿀 수 있 습 니 다.상기 js 코드 에 따라 동기 화 필드 async:false 를 추가 할 수 있 습 니 다.수 정 된 웹 페이지 코드 는 다음 과 같 습 니 다.
$.ajax({
url: remoteur+'/api/innerMessageApi/noticeMessage.htm?callBackFunc=xx',
type: 'get',
dataType: 'jsonp',
jsonpCallback:"xx",
data: {msgId: msgId},
//
async: false,
success: function(res){
//
document.title = res.title;
complete:function(res){
...
}
})
비록 이렇게 하면 이 문 제 를 해결 할 수 있 지만 여전히 좋 은 해결 방법 이 아니다.예 를 들 어 웹 페이지 를 불 러 올 때 동기 화 된 방식 으로 웹 페이지 제목 을 얻는다.만약 에 동기 화 작업 이 막 히 면 웹 페이지 의 불 러 오기 가 막 혀 서 웹 페이지 를 보 여줄 수 없 기 때문에 가장 좋 은 해결 방법 이 아니다.방법
웹 페이지 엔 드 와 iOS 엔 드 를 결합 하면 웹 페이지 에서 다른 단계 로 제목 을 가 져 올 수 있 습 니 다.제목 을 가 져 온 후에 js 를 통 해 원생 의 방법 으로 제목 을 설정 할 수 있 습 니 다.그러면 제목 을 동기 화하 여 웹 페이지 로 딩 과정 을 막 지 않 을 수도 있 고 제목 을 가 져 오 는 데 지연 되 어 시간 이 정 해 지지 않 는 문제 가 되 지 않 기 때문에 이 방법 은 이 문 제 를 완벽 하 게 해결 할 수 있 습 니 다.
js 엔 드 코드:
$.ajax({
url: remoteur+'/api/innerMessageApi/noticeMessage.htm?callBackFunc=xx',
type: 'get',
dataType: 'jsonp',
jsonpCallback:"xx",
data: {msgId: msgId},
//
async: false,
success: function(res){
//
document.title = res.title;
// js
setWebViewTitle(title);
complete:function(res){
...
}
})
iOS 엔 드 코드:
context[@"setWebViewTitle"] = ^(){
NSArray *args = [JSContext currentArguments];
if (args.count == 1) {
// ,
self.title = [args firstObject];
}
};
사실은 js 가 원생 을 호출 하 는 방식 이 매우 많 습 니 다.여 기 는 비교적 간단 한 방식 일 뿐 구체 적 으로 어떤 방식 으로 든 가능 합 니 다.만약 에 이 지식 에 대해 잘 모 르 면 다른 자 료 를 참고 할 수 있 습 니 다.저 는 인터넷 에서 많은 자 료 를 찾 았 는데 사이트 제목 을 동적 으로 수정 하 는 것 은 대부분이 동기 화 작업 이라는 것 을 발 견 했 습 니 다.비동기 로 동적 으로 제목 을 수정 하 는 것 을 소개 하지 않 았 습 니 다.그래서 저 는 동적 으로 제목 을 설정 하 는 방법 을 위 와 같이 정리 하고 필요 한 친구 에 게 도움 을 주 고 싶 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.