2012-01-11 1 views
1

J'ai NSURLProtocol et enregistré sous-classé dans didFinishLaunchingWithOptions avec ce code:personnalisé NSURLProtocol pas utilisé dans la deuxième WebView

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

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

Pour la première UIWebView dans mon application (dans la fenêtre principale) la méthode canInitWithRequest est déclenchée, et Je peux exécuter mon code personnalisé.

Cependant j'ai un second UIWebView, c'est-à-dire dans un UIViewController qui est poussé à un certain point dans l'application (présenté modalement). Le canInitWithRequest ne sera pas appelé pour le deuxième UIWebView, donc je ne peux pas exécuter mon code personnalisé. Cela est également vrai lorsque le protocole est enregistré après que les deux instances UIWebView ont été créées.

Quelqu'un sait pourquoi?

[edit] d'oh! Je viens de trouver que c'était une simple erreur dans le javascript qui est chargé dans la deuxième webview :( fonctionne comme un charme dans les deux webviews maintenant!

+0

Le problème n'est pas d'enregistrer votre protocole. Vous avez seulement besoin de l'enregistrer une fois. Je serais curieux de voir comment vous chargez vos requêtes dans UIWebView. Par exemple, appelez-vous [webView loadRequest: request]. – jimmyg

+0

effectivement la demande est déclenchée à partir d'un appel javascript/ajax, et j'essaye de l'intercepter dans canInitWithRequest. fonctionne pour le premier webview, ne fonctionne pas pour le deuxième webview :( – user826955

+0

Pouvez-vous fournir des détails sur le correctif que vous avez découvert? Même si c'est une erreur js qui est spécifique à votre App. Je rencontre le même problème et je tire mes cheveux en essayant de comprendre le problème. –

Répondre

2

Vous ne savez pas si cela est lié à votre situation et solution, mais l'affichage pour Découvert aujourd'hui après de nombreux essais et tribulations qu'un appel ajax envoyant un message à l'objectif c qui doit être intercepté par une sous-classe de NSURLProtocol devrait avoir le cache mis à false si vous prévoyez d'envoyer la même URL plus d'une fois. si:.

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

Si le cache = true alors objectif c ne sera jamais recevoir des demandes ultérieures sur la même URL

Questions connexes