window.openDatabase генерирует SECURITY_ERR в приложении OSX на основе WebKit - PullRequest
3 голосов
/ 22 сентября 2011

Я пишу основанное на webkit приложение osx с пакетом файлов javascript.Я настраиваю webView следующим образом:

webview = [[WebView alloc] init];

[webview setPolicyDelegate:self];
[webview setFrameLoadDelegate:self];
[webview setUIDelegate:self];
[webview setResourceLoadDelegate:self];    

WebPreferences* prefs = [webview preferences];
[prefs setUsesPageCache:YES];
[prefs _setLocalStorageDatabasePath:@"/tmp/test"]; // existed folder, writable
[prefs setAllowUniversalAccessFromFileURLs:YES];   // enable cross-domain xmlhttprequest
[prefs setAllowFileAccessFromFileURLs:YES];
[prefs setJavaScriptCanAccessClipboard:YES];

[prefs setDatabasesEnabled:YES];                   // enable localDatabase
[prefs setLocalStorageEnabled:YES];                // enable localStorage
[prefs setDeveloperExtrasEnabled:YES];

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html" inDirectory:@"data"];
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
[webview.mainFrame loadRequest:[NSURLRequest requestWithURL:fileURL]];

Вот часть кода data / test.html. Функция оповещения подключена к NSLog сообщения.

function test(){
    alert("startup");
    if(window.localStorage){
        alert("local storage works");
    }else{
        alert("local storage not supported");
    }
    localStorage.setItem('testItem', "hello world; local storage works!");
    alert(localStorage.getItem('testItem'));

    if(window.openDatabase){
        alert("local database works");
        window.openDatabase("mydb", "1.0", "my first database", 2 * 1024 * 1024);
    }else{
        alert("local database not supported");
    }
    return true;
}

Здесьэто журнал:

автозагрузка

локальное хранилище работает

hello world;локальное хранилище работает!

локальная база данных работает

CONSOLELOG: 17 @ SECURITY_ERR: исключение DOM 18: была предпринята попытка прорваться через политику безопасности агента пользователя.@ file: ///path/of/my.app/Contents/Resources/data/test.html

Я не знаю, почему работает window.openDatabase, но не может создать базу данных.Спасибо.

1 Ответ

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

Смотрите мой ответ здесь: https://stackoverflow.com/a/8975014/146099

Решение, которое я разместил, сработало для меня. Есть и другие ссылки с немного отличающимися решениями, которые могут работать лучше для вас.

...