3

このメソッドを実装するにはどうすればよいですか (以下を参照)。私は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

4 に答える 4

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
}
于 2008-12-09T21:21:04.283 に答える
1

ディスカッション ボードからいくつかの助けを得ました。

パブリック SVN の WebKit の WebKitTools に含まれるこのメソッドの実装があるようです。(クラスの名前は 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.

ジョン

于 2008-12-09T21:12:43.177 に答える
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); 
    }
} 
于 2008-12-10T06:11:30.157 に答える
0

これは私のために働いた:https ://stackoverflow.com/a/8975014/146099-それはジェフの答えのわずかなバリエーションです。

于 2012-01-23T16:34:12.367 に答える