2009-08-14 4 views
0

그래서 WebKit의 WebView 및 WebFrame을 사용하고 있습니다. 사용자 지정 NSURLProtocol을 사용하여 데이터베이스에서 각 요청에 대한 HTML을 검색합니다. 문제는 HTML의 링크가 모두 절대적이어야한다는 사실에 기인합니다. 예를 들어, 페이지WebView (또는 WebFrame)의 모든 링크를 절대 경로로 처리 할 수 ​​있습니까?

foo/bar.html

링크가 상대이기 때문에 문제는, 요청이

/foo/foo/baz.html
위한 것으로 끝나는 것이

foo/baz.html

를 가리키는 거기에 링크가있다

지금까지 두 URL을 비교하고 공통 접두사를 제거하여이 문제를 해결하려고했습니다.이 경우 'foo /'입니다. foo/baz.html을 남겨 둡니다. 그러나 경로 상에 여러 개의 디렉토리가있는 경우이 기능은 모든 가능성에 대해 작동하지 않습니다. 내 WebView의 frameLoadDelegate의 "didStartProvisionalLoadForFrame :"메소드에서이 작업을 수행합니다.

불행히도 내가 표시하는 HTML을 제어 할 수 없어 링크 자체를 수정하는 것은 옵션이 아닙니다.

답변

0

메인 프레임의 리소스로드 대리인이되고 webView:resource:willSendRequest:redirectResponse:fromDataSource:을 구현하여 요청한 URL을 수정 해보십시오. 요청 URL에 relativeString을 보내 원래의 상대 URL을 얻은 다음 -[NSURL initWithString:baseURL:]을 사용하여 올바른 기본 URL에 대해 동일한 상대 문자열로 새 URL을 만듭니다.

+0

어떤 이유에서 [request relativeString]은 현재 URL이 이미 앞에 붙어있는 전체 URL을 제공합니다. 즉, relativeString과 absoluteString은 동일한 문자열을 반환합니다. –

+0

그래서 나는 그것을 해결했습니다. webView : resource : willSendRequest : redirecResponse : fromDataSource :에서 요청의 URL과 현재 페이지의 URL을 얻습니다. 마지막 경로 구성 요소를 제거하여 현재 디렉토리를 가져온 다음 요청의 URL 시작 부분에서 제거하십시오. 적어도 올바른 방향으로 나를 지적 했으므로이 대답을 받아 들일 것입니다. 감사! –