2011-01-24 4 views
13

goBack 방법을 위반하지 않고 사용자 정의 HTML을 UIWebView에로드하는 데 문제가 있습니다. 내 UIWebView의 URL 요청을 차단하고있어UIWebView에서 NSURLRequests를 가로 채지 않고 뒤로 단추를 깰 수 있습니까?

작동 무엇

그래서 사용자 정의 HTML을로드 할 수 있습니다. 나는 모든 HTML을 제어 할 수 있으므로, 내 특별한 앱 요청은 webView:shouldStartLoadWithRequest:navigationType:에서 구문 분석 할 수있는 맞춤 구성표 (즉, myapp://arg1/?arg2=val)를 사용한다. HTML을 실제로로드하고 loadHTMLString:baseURL을 호출하고 NO을 반환하여 원래 요청을 취소합니다. 큰

위의 작품을 작동하지 않습니다 무엇

. 문제는 UIWebView'sgoBack 메서드를 사용하고 loadRequest:은 해당 내역 스택에 추가하는 유일한 UIWebView 메서드 인 것으로 보입니다.

몇 가지 아이디어가 있지만 가능한 것은 무엇인지, 어떻게 갈 것인지 잘 모르겠습니다. 주요 것은 내가 을 webView:shouldStartLoadWithRequest:navigationType에 돌려 보내야하고, UIWebViewloadRequest 방법을 사용해야한다는 것입니다.

아이디어 1 : NSURLRequest/응답을 수정 내가 NSURLRequest를 서브 클래 싱 할 수 있도록 실제로 HTTP 요청을하지 않습니다합니다 (있는 UIWebView는 요청을 할 때)과 내 HTML와 함께 NSURLResponse을 반환? 아니면 NSURLResponse 어떻게 든 카테고리 방법을 수정/하위 클래스/추가? 나는 그것이 진짜 요청이라는 생각을 좋아하지만, 나는 프라이빗 API에 관심이 있고 앱 스토어에서 거절 당한다.

아이디어 2 : 핸들 사용자 정의 URL 프로토콜을 등록 사용자 정의 URL 프로토콜 그래서 내 응용 프로그램은 응답하고 나는 그것이 합법적 인 NSURLResponse 반환 할 수 있습니다

아이디어 3 (내 사용자 지정 HTML로 가득합니다.) : 캐시를 속일 수있다 캐시 정책이 NSURLRequestReturnCacheDataDontLoad 인 요청을 만든 다음 webView와 캐시간에 내 HTML을 가져온다.

아니면 완전히 잘못된 트랙에 있습니다.

+1

당신이 좋은 해결책을 마련 했습니까? 그렇다면 무엇 이었습니까? –

+0

내 새로운 대답을 참조하십시오. – zekel

답변

1

위의 방법 중 하나를 추천합니다.

# 3이 작동했지만 디버깅하기가 매우 어려웠습니다. (예를 들어, 애플은 NSURLRequests을 파괴하고 다시 생성하므로 NSURLRequest를 하위 클래스로 분류 할 수없고 후속 응답에서 처리 할 수 ​​없습니다.)

결국 내 자신의 역사와 기록이 더 쉬워졌습니다 로드 할 페이지와 스크롤 할 위치 (세로 화면 오프셋).

+0

답변 해 주셔서 감사합니다. Ortwin이 제안한 Love with Cocoa에서 로컬 캐시 제안을 시도하기로 결정했습니다. 지금까지 필자가 필요로하는 것을 수행하고 있으며 상당히 견고한 것으로 보인다. –

7

내가 그냥 테스트 다른 정말 영리한 방법이있다 : 대신 NSURLCache 땜질 또는 전체 탐색 기록 코드를 다시 작성, 단지 HTTP 요청이 될 때마다 표준 NSURLConnection에서 사용하는 사용자 정의 NSURLProtocol을 만들 수 있습니다.거기에 자신 만의 NSURLRequest을 만들어 데이터를로드하고 MIME 형식을 검사하거나 요청 내용을 변경하거나 원하는대로 디스크에 데이터를 캐시 할 수 있습니다.

http://robnapier.net/blog/offline-uiwebview-nsurlprotocol-588

그의 코드는 GitHub의에 또한 지금 :이 아이디어는 롭 네이피어의 호의 온다

https://github.com/rnapier/RNCachingURLProtocol

+0

링크를 게시 해 주셔서 감사합니다. 그것은 내가 여전히 관심이있는 것입니다. – zekel

관련 문제