Пользовательский NSURLProtocol не используется во втором веб-просмотре - PullRequest
1 голос
/ 11 января 2012

Я вложил в подкласс NSURLProtocol и зарегистрировал его в didFinishLaunchingWithOptions с этим кодом:

+ (void) registerProtocol 
{
   static BOOL registered = NO;

   if (!registered) 
   {
      [NSURLProtocol registerClass:[MyURLProtocol class]];
      registered = YES;
   }
}

Для первых UIWebView в моем приложении (в главном окне) запускается метод canInitWithRequest, и я могу выполнить свой собственный код.

Однако у меня есть второй UIWebView, который находится внутри UIViewController, который выдвигается в какой-то момент в приложении (представлен модально). canInitWithRequest НЕ будет вызван для второго UIWebView, поэтому я не могу выполнить свой пользовательский код. Это даже верно, когда протокол зарегистрирован после того, как оба экземпляра UIWebView созданы.

Кто-нибудь знает почему?

[править] d'ах! я только что обнаружил, что это была просто ошибка в JavaScript, который загружается во втором веб-представлении :( теперь работает как очарование в обоих веб-обозрениях!

1 Ответ

2 голосов
/ 02 ноября 2012

Не уверен, связано ли это с вашей ситуацией и решением, но пост для записи.Сегодня, после долгих испытаний и бедствий, было обнаружено, что вызов ajax, отправляющий сообщение объекту c, который должен быть перехвачен подклассом NSURLProtocol, должен иметь кэш, установленный в false, если вы ожидаете, что один и тот же URL отправляется несколько раз.Например:

$.ajax({
       url:"atavistcommand://" + name,
       data:JSON.stringify(data),
       type:"GET",
       processData:false,
       cache:false )};

Если cache = true, тогда цель c никогда не получит последующие запросы на тот же URL.

...