Implementación de un delegado de cuota de base de datos WebView

votos
3

¿Cómo implemento este método (ver a continuación)? Soy nuevo en Objective-C y simplemente no lo estoy haciendo bien.

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

Por defecto, las bases de datos tienen una cuota de 0; esta cuota debe aumentarse antes de que cualquier base de datos se almacene en el disco.

Los clientes de WebKit deben implementar el método WebUIDelegate - webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:e incrementar la cuota como se desee cuando se llama a ese método. Este método se define en WebUIDelegatePrivate.h. Se agregó demasiado tarde en el ciclo de publicación anterior para convertirlo en un encabezado no privado. Valdría la pena presentar un error acerca de mover esta llamada a WebUIDelegate.h para que sea parte de la API oficial.

John

Publicado el 09/12/2008 a las 19:52
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
3

En cualquier clase que haya definido como delegado para su WebView, debe implementar ese método, algo como esto:

- (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
}
Respondida el 09/12/2008 a las 22:21
fuente por usuario

votos
1

Obtuve ayuda de un panel de discusión:

Parece haber una implementación de este método incluida en WebKitTools de WebKit en su SVN público. (La clase se llama UIDelegate). http://trac.webkit.org/browser/trunk/WebKitTools/DumpRenderTree/mac/U ...

Supongo que ha creado un delegado para su vista de WebKit. En esa clase de delegado, crea un método con la firma:

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

Probablemente pueda usar una versión modificada de la implementación 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];
}

No lo he intentado, así que YMMV.

Jon

Respondida el 09/12/2008 a las 22:12
fuente por usuario

votos
0

Esto funcionó para mí: https://stackoverflow.com/a/8975014/146099 - es una ligera variación en la respuesta de Jeff.

Respondida el 23/01/2012 a las 17:34
fuente por usuario

votos
0

Aquí está la respuesta final.

Estaba usando la aplicación de ejemplo MiniBrowser.

En MyDocument.m agregué esta función:

- (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); 
    }
} 
Respondida el 10/12/2008 a las 07:11
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more