2008-12-09 9 views
3

Comment implémenter cette méthode (voir ci-dessous)? Je suis nouveau à Objective-C et je ne comprends pas bien.Implémentation d'un délégué de quota de base de données WebView

De: http://lists.apple.com/archives/Webkitsdk-dev/2008/Apr/msg00027.html

par les bases de données par défaut ont un quota de 0; ce quota doit être augmenté avant qu'une base de données ne soit stockée sur le disque.

Les clients WebKit doivent implémenter la méthode WebUIDelegate - webView:frame:exceededDatabaseQuotaForSecurityOrigin:database: et augmenter le quota comme souhaité lorsque cette méthode est appelée. Cette méthode est définie dans WebUIDelegatePrivate.h. Il a été ajouté trop tard dans le cycle de publication précédent pour en faire un en-tête non privé. Il vaudrait la peine de déposer un bug sur le déplacement de cet appel vers WebUIDelegate.h afin qu'il fasse partie de l'API officielle.

John

Répondre

3

Quelle que soit la classe que vous avez défini en tant que délégué pour votre WebView vous avez besoin de mettre en œuvre cette méthode, quelque chose comme ceci:

- (void)webView:(WebView *)sender frame:(WebFrame *)frame exceededDatabaseQuotaForSecurityOrigin:(WebSecurityOrigin *)origin database:(NSString *)databaseIdentifier { 
    unsigned long long newQuotaBytes = 10 * 1024 * 1024; 
    [origin setQuota:newQuotaBytes]; 

    // origin also responds to -usage method to return current size for all databases in this origin 
} 
+0

Peut confirmer cette solution a bien fonctionné en utilisant un WebView avec un délégué de l'interface utilisateur de visualisation http://html5demos.com/database –

1

Got aide d'un forum de discussion:

Il semble y avoir une mise en œuvre de cette méthode incluse dans WebKitTools de WebKit dans leur SVN public. (La classe s'appelle UIDelegate). Je suppose que vous avez créé un délégué pour votre vue WebKit. Je suppose que vous avez créé un délégué pour votre vue WebKit. Dans cette classe de délégué , créer une méthode avec la signature:

- (void)webView:(WebView *)sender frame:(WebFrame *)frame 
exceededDatabaseQuotaForSecurityOrigin:(WebSecurityOrigin *)origin 
database:(NSString *)databaseIdentifier; 

Vous pouvez probablement utiliser une version modifiée de la mise en œuvre de UIDelegate:

- (void)webView:(WebView *)sender frame:(WebFrame *)frame 
exceededDatabaseQuotaForSecurityOrigin:(WebSecurityOrigin *)origin 
database:(NSString *)databaseIdentifier 
{ 
    static const unsigned long long defaultQuota = 5 * 1024 * 1024; 
    [origin setQuota:defaultQuota]; 
} 

Je ne l'ai pas essayé, donc YMMV.

Jon

0

est ici la réponse finale. J'utilisais l'application exemple MiniBrowser.

Dans MyDocument.m j'ajouté cette fonction:

- (void)webView:(WebView *)sender frame:(WebFrame *)frame exceededDatabaseQuotaForSecurityOrigin:(id)origin database:(NSString *)databaseIdentifier 
{ 
    static const unsigned long long defaultQuota = 5 * 1024 * 1024; 
    if ([origin respondsToSelector: @selector(setQuota:)]) { 
     [origin setQuota: defaultQuota]; 
    } else { 
     NSLog(@"could not increase quota for %@", defaultQuota); 
    } 
} 
Questions connexes