请考虑以下示例:
的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>
查看控制器:
@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
MyProtocol:
@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
如果我没有注册我的自定义URLProtocol,页面将正确显示.如果我调用startLoading(),则会加载内容并在之后触发stopLoading().但在UIWebVIEw上根本没有任何事情发生.我试图做一些错误处理,但是既没有抛出Js AJAX错误,也没有调用uiwebviewdelegate的dIDFailLoaDWithError.
我尝试了另一个场景并创建了一个只加载图像的HTML页面:
<img src="image.png" />
并修改我的URLProtocol只是处理图像的加载 – 这是正常的.也许这与AJAX调用有关?
你知道问题可能是什么吗?
提前致谢!
解决方法 我有同样的问题,经过几天的拔毛后终于解决了:您的问题来自您创建响应的方式,您必须创建状态200响应并强制WebVIEw在必要时允许跨域请求:
NSDictionary *headers = @{@"Access-Control-Allow-Origin" : @"*",@"Access-Control-Allow-headers" : @"Content-Type"};NShttpURLResponse *response = [[NShttpURLResponse alloc] initWithURL:request.URL statusCode:200 httpVersion:@"1.1" headerFIElds:headers];
您可以在我的答案中看到我的完整工作实现:
How to mock AJAX call with NSURLProtocol?
希望这可以帮助,文森特
总结以上是内存溢出为你收集整理的ios – 使用自定义NSURLProtocol在UIWebView中通过AJAX调用加载文本文件失败全部内容,希望文章能够帮你解决ios – 使用自定义NSURLProtocol在UIWebView中通过AJAX调用加载文本文件失败所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)