On Cocoa, You can intercept the WebView requests using a custom NSURLProtocol. There is a fairly complete example here:
http://stackoverflow.com/questions/3155359/in-webkit-how-do-i-get-the-content-of-a-resource On Jun 20, 2012, at 1:08 AM, BareFeetWare <list.develo...@barefeetware.com> wrote: > Hi all, > > I'm trying to design a custom caching mechanism for a UIWebView. When the > first URL request is loaded, it spawns further URL requests for loading > graphics. As the user clicks links etc, it loads more URL requests. > > I can use a subclass of NSURLCache to intercept requests for cached data: > > @interface BFWURLCache : NSURLCache > > @end > > @implementation BFWURLCache > > - (NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request > { > NSCachedURLResponse* cachedResponse = nil; > NSString* cachePath = [self cachePathForRequest:request]; > if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath]) > { > DLog(@"using cached: %@", cachePath); > NSURL* cacheURL = [NSURL fileURLWithPath:cachePath]; > NSURLResponse* urlResponse = [[NSURLResponse alloc] > initWithURL:cacheURL MIMEType:nil expectedContentLength:1 > textEncodingName:nil]; > cachedResponse = [[NSCachedURLResponse alloc] > initWithResponse:urlResponse data:[[NSFileManager defaultManager] > contentsAtPath:cachePath]]; > [urlResponse release]; > [cachedResponse autorelease]; > } > else > { > DLog(@"caching: %@", request.URL); > [self queueRequest:request]; > } > return cachedResponse; > } > > @end > > Then in my AppDelegate, I tell the app to use my custom cache: > > [NSURLCache setSharedURLCache:[[[BFWURLCache alloc] > initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]] autorelease]; > > That works fine for intercepting URL requests in any web view. If the > corresponding file exists at cachePath, it is given as a response to the > request. > > However, if the cachePath file does not already exist (ie has not been cached > yet), my queueRequest method fires off a new NSURLConnection with the > request, downloads the file into the cachePath. Since this takes time (in > another thread), I don't have any cachedResponse ready to return from the > cachedResponseForRequest call, so it just returns nil. The UIWebView sees the > nil return (ie nothing cached) and so proceeds to load the URL itself. So now > I have two processes loading the same URL: The web view and the custom > caching mechanism. > > How can I intercept URL requests from UIWebViews, including spawned requests > and customise the responses? Is overriding NSURLCache (as above) the only > way? If so, how can I get at the data of the response when it is first loaded > (so I don't have to download it separately)? > > Thanks, > Tom > > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/cocoa-dev/starkos%40industriousone.com > > This email sent to star...@industriousone.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com