我已将NSURLProtocol
分包并使用以下代码在didFinishLaunchingWithOptions
中注册:
+ (void) registerProtocol
{
static BOOL registered = NO;
if (!registered)
{
[NSURLProtocol registerClass:[MyURLProtocol class]];
registered = YES;
}
}
对于我的应用中的第一个UIWebView
(在主窗口中),方法canInitWithRequest
被触发,我可以执行自定义代码。
但是我有第二个UIWebView
,它位于UIViewController
内,在app中的某个位置推送(以模态方式显示)。不会为第二个canInitWithRequest
调用UIWebView
,因此我无法执行自定义代码。在创建UIWebView
的两个实例后注册协议时,情况甚至如此。
任何人都知道为什么?
[编辑] D'哦!我刚刚发现它只是在第二个webview中加载的javascript中的一个简单错误:( 现在在两个网页浏览中都像魅力一样!
答案 0 :(得分:2)
不确定这是否与您的情况和解决方案有关,而是张贴记录。今天经过多次试验和考验后发现ajax调用向目标c发送消息,该消息将被NSURLProtocol的子类截获,如果您希望多次发送相同的url,则应将缓存设置为false。像这样:
$.ajax({
url:"atavistcommand://" + name,
data:JSON.stringify(data),
type:"GET",
processData:false,
cache:false )};
如果cache = true,则objective c将永远不会在同一个url上接收后续请求。