Реализация делегата квоты базы данных WebView - PullRequest
3 голосов
/ 09 декабря 2008

Как мне реализовать этот метод (см. Ниже)? Я новичок в Objective-C, и я просто не понимаю это правильно.

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

По умолчанию базы данных имеют квоту 0; эта квота должна быть увеличена до того, как любая база данных будет сохранена на диске.

Клиенты WebKit должны реализовать метод WebUIDelegate - webView:frame:exceededDatabaseQuotaForSecurityOrigin:database: и увеличивать квоту по желанию при вызове этого метода. Этот метод определен в WebUIDelegatePrivate.h. Он был добавлен слишком поздно в предыдущем цикле выпуска, чтобы превратить его в не приватный заголовок. Было бы целесообразно сообщить об ошибке при перемещении этого вызова в WebUIDelegate.h, чтобы он стал частью официального API.

John

Ответы [ 4 ]

3 голосов
/ 10 декабря 2008

В любом классе, который вы определили в качестве делегата для вашего WebView, вам нужно реализовать этот метод, примерно так:

- (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
}
1 голос
/ 10 декабря 2008

Получил некоторую помощь от доски обсуждений:

Похоже, что реализация этого метода включена в WebKit WebKitTools в своих публичных SVN. (Класс называется UIDelegate). http://trac.webkit.org/browser/trunk/WebKitTools/DumpRenderTree/mac/U...

Я предполагаю, что вы создали делегата для представления WebKit. В этом делегировать класс, создать метод с подписью:

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

Возможно, вы можете использовать модифицированную версию реализации 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];
}

Я не пробовал этого, поэтому YMMV.

Джон

0 голосов
/ 23 января 2012

Это сработало для меня: https://stackoverflow.com/a/8975014/146099 - это небольшое изменение в ответе Джеффа.

0 голосов
/ 10 декабря 2008

Вот окончательный ответ.

Я использовал пример приложения MiniBrowser.

В MyDocument.m я добавил эту функцию:

- (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); 
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...