Ładowanie pliku tekstowego przez wywołanie AJAX w UIWebView przy użyciu niestandardowego protokołu NSURL nie powiedzie się

Chcę wyświetlić stronę internetową w aplikacji iOS przy użyciuUiWebView. Niektóre składniki witryny (a mianowicie wyniki usługi internetowej ładowane przy użyciu wywołań AJAX) należy zastąpić danymi lokalnymi.

Rozważ następujący przykład:

text.txt:

foo

page1.html:

<html><head>
    <title>test</title>
    <script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<div id="target"></div>
<script type="text/javascript">
    function init(){
        $.get("text.txt",function(text){    
            $("#target").text(text);
        });
    }
    $(init);
</script>
</body></html>

Zobacz kontroler:

@interface ViewController : UIViewController <UIWebViewDelegate>
    @property (nonatomic,assign) IBOutlet UIWebView *webview;
@end


@implementation ViewController
    @synthesize webview;
    //some stuff here
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [NSURLProtocol registerClass:[MyProtocol class]];
        NSString *url = @"http://remote-url/page1.html";
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
        [request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
        [webview loadRequest:request];
    }
@end

Mój protokół:

@interface MyProtocol : NSURLProtocol

@end

@implementation MyProtocol

+ (BOOL) canInitWithRequest:(NSURLRequest *)req{
    NSLog(@"%@",[[req URL] lastPathComponent]);
    return [[[req URL] lastPathComponent] caseInsensitiveCompare:@"text.txt"] == NSOrderedSame;
}

+ (NSURLRequest*) canonicalRequestForRequest:(NSURLRequest *)req{
    return req;
}

- (void) startLoading{

    NSLog(@"Request for: %@",self.request.URL);
    NSString *response_ns = @"bar";
    NSData *data = [response_ns dataUsingEncoding:NSASCIIStringEncoding];
    NSURLResponse *response = [[NSURLResponse alloc] initWithURL:[self.request URL] MIMEType:@"text/plain" expectedContentLength:[data length] textEncodingName:nil];

    [[self client] URLProtocol: self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
    [[self client] URLProtocol:self didLoadData:data];
    [[self client] URLProtocolDidFinishLoading:self];
    [response release];
}

- (void) stopLoading{
    NSLog(@"stopLoading");
}

@end

Jeśli nie zarejestruję mojego niestandardowego protokołu URL, strona jest wyświetlana poprawnie. Jeśli zrobięstartLoading() jest wywoływana, treść jest ładowana istopLoading() jest uruchamiany później. Ale na UIWebView nic się nie dzieje. Próbowałem obsługiwać niektóre błędy, ale nie jest też zgłaszany błąd JS AJAXdidFailLoadWithError zUIWebViewDelegate nazywa.

Spróbowałem innego scenariusza i utworzyłem stronę HTML, która po prostu ładuje obraz:

<img src="image.png" />

i zmodyfikowałem mój URLProtocol, aby obsłużyć ładowanie obrazu - to działa poprawnie. Może ma to coś wspólnego z połączeniami AJAX?

Czy masz pojęcie, jaki może być problem?

Z góry dziękuję!

questionAnswers(1)

yourAnswerToTheQuestion