Implementando uma quota de delegado do banco de dados WebView

votos
3

Como faço para implementar este método (ver abaixo)? Eu sou novo para Objective-C e eu não estou compreendendo isso.

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

Por padrão bancos de dados têm uma cota de 0; Esse contingente deve ser aumentado antes de qualquer banco de dados será armazenado em disco.

Clientes WebKit deve implementar o método WebUIDelegate - webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:e aumentar a quota desejada quando esse método é chamado. Este método é definido na WebUIDelegatePrivate.h. Foi adicionado muito tarde no ciclo de versão anterior para torná-lo em um cabeçalho não-privados. Seria útil para registrar um bug sobre mover esta chamada para WebUIDelegate.h para que ele faz parte da API oficial.

John

Publicado 09/12/2008 em 19:52
fonte usuário
Em outras línguas...                            


4 respostas

votos
1

Tem alguma ajuda de um fórum de discussão:

Parece haver uma implementação deste método incluído no WebKitTools do WebKit em seu SVN público. (A classe é nomeado UIDelegate). http://trac.webkit.org/browser/trunk/WebKitTools/DumpRenderTree/mac/U ...

Eu estou supondo que você tenha criado um delegado para a sua exibição WebKit. Em que classe delegado, criar um método com a assinatura:

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

Provavelmente, você pode usar uma versão modificada da implementação do 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];
}

Eu não tentei isso, então YMMV.

Jon

Respondeu 09/12/2008 em 22:12
fonte usuário

votos
3

Em qualquer classe que você definiu como delegado para o seu WebView você precisa implementar esse método, algo como isto:

- (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
}
Respondeu 09/12/2008 em 22:21
fonte usuário

votos
0

Aqui está a resposta final.

Eu estava usando o aplicativo de exemplo MiniBrowser.

Em MyDocument.m eu adicionei essa função:

- (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); 
    }
} 
Respondeu 10/12/2008 em 07:11
fonte usuário

votos
0

Isso funcionou para mim: https://stackoverflow.com/a/8975014/146099 - é uma ligeira variação na resposta de Jeff.

Respondeu 23/01/2012 em 17:34
fonte usuário

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