实现WebView数据库配额委托

时间:2008-12-09 18:52:34

标签: objective-c cocoa webkit

如何实施此方法(见下文)?我是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的一部分。

约翰

4 个答案:

答案 0 :(得分:3)

在您定义为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 :(得分:1)

从讨论区得到了一些帮助:

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。

乔恩

答案 2 :(得分:0)

这是最终答案。

我使用的是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); 
    }
} 

答案 3 :(得分:0)

这对我有用:https://stackoverflow.com/a/8975014/146099 - 这是Jeff的答案略有不同。