我有一個Cocoa / Objective-C的應用程序,它嵌入了一個WebKit的web視圖。我須要打開的數據庫支持和本地存儲。我知道這是能夠作到-我有它在Safari中工做-但我沒法找到如何設置這在我本身的應用程序的示例。 我發現這個(未回答)問題的SO它提供了一個例子,但正如原來不起做用。而事實上,(setDatabasesEnabled,setLocalStorageEnabled)沒有在個人WebKit的定義。 (Xcode的3.2.5),儘管它們彷佛存在,若是我定義他們本身。 任何人均可以提供如何啓用本地數據庫存儲的基於WebKit的Cocoa應用程序的例子嗎?很是感謝 CodeGo.net,若是這樣的! 更新:我有工做...我是經過「數據庫」與「本地存儲」,這顯然是徹底不一樣的東西。下面是工做的代碼:javascript
WebPreferences* prefs = [webView preferences]; [prefs _setLocalStorageDatabasePath:@"~/Library/Application Support/MyApp"]; [prefs setLocalStorageEnabled:YES];
這樣的做品,但它須要_setLocalStorageDatabasePath,沒有App Store的因此我修正問題如今是:有沒有辦法,使這項工做不使用,我發如今這個答案的WebDatabaseDirectory首選項鍵,可控制數據庫的地方去。但我沒法找到相應的密鑰本地存儲在源的任何地方。或者是有沒有辦法迫使本地存儲的數據庫,因此WebDatabaseDirectory鍵?任何想法?
本文地址 :CodeGo.net/234678/ java
-------------------------------------------------------------------------------------------------------------------------
1. 我提交了這個代碼在Mac App Store,蘋果批准了:web
WebPreferences* prefs = [webView preferences]; [prefs _setLocalStorageDatabasePath:@"~/Library/Application Support/MyApp"]; [prefs setLocalStorageEnabled:YES];
他們是否會繼續批准,我不知道,但他們容許它爲個人應用程序爲2011-01-29。更新:他們還批准了版本更新的應用程序,因此它已經經歷了兩次。
2. 我要採起的Javascript,以Objective-C的引橋和儲存全部的核心數據。設置的localStorage爲false,而後創建一個JS對象和實例「localStorage中」與個人JavaScript開發者不會知道其中的差異 CodeGo.net,並且我已經有作的事情與空氣(基本)。還有另外一種方式離開localStorage的無缺,即便它實際上並無將它們存儲在持久性數據庫。該可經過在javascript中進行迭代,並從那裏操縱,但我認爲這將是乾脆用本身的替換對象。
3. 通過了不少痛苦,我找到了一種方法,使本地存儲,並將它堅持跨應用程序正常運行。這個解決方案是專門針對OSX,但它可能適用於iOS的爲好。 下載並添加這個頭文件到您的項目。它不包括在XCode中的Webkit分佈。 點擊下載WebStorageManagerPrivate.h 添加到它,下面幾行:數據庫
static NSString* _storageDirectoryPath(); + (NSString *)_storageDirectoryPath;
這容許您檢索WebKit的本地存儲軌跡數據庫的目錄位置。這是因爲在WebKit的一個bug重要的,若是你不存儲在目錄中的軌跡數據庫的localStorage中的WebView文件,它們都將被刪除全部其餘運行您的應用程序。我沒有看到一個辦法在WebStorageManager代碼來更改此位置爲單個應用程序。它老是從優先讀出。 包括WebStorageManagerPrivate.h在你的AppDelegate。app
#include "WebStorageManagerPrivate.h"
您須要下載幷包含在你的項目不包括在XCode中分佈的另外一頭。將其保存爲WebPreferencesPrivate.h 點擊下載WebPreferencesPrivate.h 包括WebPreferencesPrivate.h在你的AppDelegate。spa
#include "WebPreferencesPrivate.h"
在下面的applicationDidFinishLaunching處理程序中的代碼來初始化並啓用localStorage中。你有一個IBOutlet'web視圖'爲的WebView你的代碼.net
NSString* dbPath = [WebStorageManager _storageDirectoryPath]; WebPreferences* prefs = [self.webView preferences]; NSString* localDBPath = [prefs _localStorageDatabasePath]; // PATHS MUST MATCH!!!! otherwise localstorage file is erased when starting program if( [localDBPath isEqualToString:dbPath] == NO) { [prefs setAutosaves:YES]; //SET PREFS AUTOSAVE FIRST otherwise settings aren't saved. // Define application cache quota static const unsigned long long defaultTotalQuota = 10 * 1024 * 1024; // 10MB static const unsigned long long defaultOriginQuota = 5 * 1024 * 1024; // 5MB [prefs setApplicationCacheTotalQuota:defaultTotalQuota]; [prefs setApplicationCacheDefaultOriginQuota:defaultOriginQuota]; [prefs setWebGLEnabled:YES]; [prefs setOfflineWebApplicationCacheEnabled:YES]; [prefs setDatabasesEnabled:YES]; [prefs setDeveloperExtrasEnabled:[[NSUserDefaults standardUserDefaults] boolForKey: @"developer"]]; #ifdef DEBUG [prefs setDeveloperExtrasEnabled:YES]; #endif [prefs _setLocalStorageDatabasePath:dbPath]; [prefs setLocalStorageEnabled:YES]; [self.webView setPreferences:prefs]; }
我但願這能夠幫助其餘人一直在努力,或仍與這個問題苦苦掙扎,直到它是在WebKit中正確固定。localstorage