UIWebViewDelegate不会监控使用XMLHttpRequest发出的请求,这是真的吗?如果是这样的话,有没有办法监控这类请求?
例如,UIWebViewDelegate在-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSMutableURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
中没有捕捉到这一点;
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://www.google.com", true);
xhr.onreadystatechange=function()
{
if (xhr.readyState==4)
{
alert(xhr.responseText);
}
}
xhr.send();
发布于 2012-07-24 12:56:22
您可以使用NSURLProtocol。例如,如果您使用http://localhost/path
调用XMLHttpRequest,您可以使用以下方法来处理它:
@interface YourProtocol: NSURLProtocol
然后,对于实现:
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
return [request.URL.host isEqualToString:@"localhost"];
}
+ (NSURLRequest *) canonicalRequestForRequest:(NSURLRequest *)request
{
return request;
}
- (void) startLoading
{
// Here you handle self.request
}
- (void)stopLoading
{
}
您需要按如下方式注册协议:
[NSURLProtocol registerClass:[YourProtocol class]];
发布于 2012-01-31 17:53:06
通过实现和注册NSURLProtocol的子类,您可以捕获来自UIWebView的所有请求。在某些情况下,这可能是过度杀伤力,但如果您不能修改实际运行的javascript,那么它是您最好的选择。
在我的例子中,我需要捕获所有请求,并向每个请求插入一个特定的HTTP头。我已经实现了NSURLProtocol,使用registerClass注册它,如果请求对应于我感兴趣的URL,则在我的子类中对+ (BOOL)canInitWithRequest:(NSURLRequest *)请求回答YES。然后,您必须实现协议的其他方法这可以通过使用NSURLConnection、将协议类设置为委托并将NSURLConnection的委托方法重定向到NSURLProtocolClient来实现
发布于 2011-04-15 02:59:35
这看起来确实是真的。除了UIWebViewDelegate提供的内容之外,没有办法监控UIWebView正在做什么,除非您能想出一种方法来使用stringByEvaluatingJavaScriptFromString:
注入一些Javascript来做您需要的事情。
https://stackoverflow.com/questions/5353278
复制相似问题