objective-c ios webkit 本地存儲local-storage

我有一個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

相關文章
相關標籤/搜索