Wie aktiviere ich den Lokalen Speicher in meiner WebKit-basierte Anwendung?
Ich habe eine Cocoa/Objective-C-Anwendung, die eingebettet WebKit WebView. Ich muss wiederum auf die Datenbank-Unterstützung und vor-Ort-Speicherung. Ich weiß, es kann getan werden-ich habe es in Safari nicht funktioniert-aber ich kann nicht finden, ein Beispiel, wie das in meiner eigenen Anwendung.
Fand ich diese (unbeantwortete) Frage ALSO bietet ein Beispiel aber, wie das ursprüngliche Plakat erwähnt, funktioniert nicht. Und in der Tat, die Methoden, die er verwendet (setDatabasesEnabled, setLocalStorageEnabled) nicht definiert in meine WebKit.framework (Xcode 3.2.5), obwohl Sie scheinbar auf zu existieren, wenn ich definiere Sie selbst.
Kann mir jemand ein Beispiel geben, wie eine lokale-Datenbank Speicher für einen WebKit-basierten Cocoa-Anwendung? Vielen Dank, wenn das so ist!
Update: ich habe etwas zu arbeiten...ich war verwirrt "Datenbanken" vs. "lokalen Speicher", die offenbar ganz verschiedene Dinge. Hier ist der code, der funktioniert:
WebPreferences* prefs = [webView preferences];
[prefs _setLocalStorageDatabasePath:@"~/Library/Application Support/MyApp"];
[prefs setLocalStorageEnabled:YES];
So, das funktioniert, aber es erfordert die private Methode _setLocalStorageDatabasePath, was bedeutet, dass keine App Store für mich. Also meine geänderten Fragen ist nun: gibt es eine Möglichkeit, diese Arbeit zu machen ohne mit einer privaten Methode ist? Ich fand die WebDatabaseDirectory Präferenz der Schlüssel in dieser Antwort, die steuert, wo Datenbanken gehen. Aber ich konnte nicht finden einen entsprechenden Schlüssel für die lokale Speicherung überall in den Quellen. Oder gibt es eine Möglichkeit für mich zu zwingen, die lokale Speicherung, um die Datenbank verwenden, und so die WebDatabaseDirectory Schlüssel? Irgendwelche Ideen?
InformationsquelleAutor starkos | 2010-12-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Legte ich eine app mit diesem code, des Mac App Store, und Apple genehmigt:
Objective-C
Swift 3
Ob Sie weiterhin zu genehmigen, dass, ich weiß es nicht, aber Sie dürfen es für meine Anwendung als der 2011-01-29. Update: Sie genehmigt auch eine version aktualisieren, um die gleiche app, so dass Sie durchgemacht hat, zweimal.
wo genau steckst du? @Umsetzung? .h? Klärung geschätzt.. sorry für Dummheit...
In der Regel wird Apple genehmigen die meisten WebKit-privaten Methoden da WebKit selbst ist open-source.
Diese Frage, die zuletzt aktiv war vor fast einem Jahr, so kann Apple entfernt haben, die Unterstützung für die
_setLocalStorageDatabasePath:
undsetLocalStorageEnabled:
Methoden, denn ich kann nicht einen Weg finden, um Sie überall, aber wenn Sie sind sich bewusst, dass die Unterstützung ist immer noch da draußen, wie kann ich Unterstützung für diese Methoden in meinem code, so dass ich Sie verwenden kann?Wie machst du es in Swift?
InformationsquelleAutor Marcus Cavanaugh
Werde ich das Javascript, Objective-C bridge approach und speichern alles in core data. Set "localStorage" auf false, dann baut man ein JS-Objekt und eine Instanz mit dem Namen "localStorage" mit den gleichen Methoden. Meine javascript-Entwickler wissen nicht, den Unterschied, und ich hatte schon zu tun die gleiche Sache mit der Luft (im Grunde). Es gibt einen anderen Weg aus dem localStorage intakt, obwohl es eigentlich nicht speichern Sie Sie in einem persistenten db. Die Elemente Durchlaufen werden können durch in javascript und manipuliert, von der es, aber ich denke es wird besser sein, ersetzen Sie einfach das Objekt mit meinen eigenen.
Das einzige problem bei diesem Ansatz ist, dass, wenn Sie sqlite verwenden, die Abfragen asynchron ausführen, so
alert(localStorage.getItem('a'));
wird nicht funktionieren.Wo finde ich ein Beispiel für diesen Ansatz?
Wäre toll, wenn die open-source-diese Brücke.
Wie haben Sie es geschafft, Sie zu ersetzen-Fenster."localStorage" mit Ihrer eigenen ? Habe ich erfolgreich umgesetzt, ein LocalStorage-Objekt, allerdings kann ich nicht zuordnen-Fenster."localStorage".
InformationsquelleAutor tbranch
Nach einer Menge Schmerz und frustration, die ich einen Weg gefunden, aktivieren Sie den lokalen Speicher und haben es bleiben in Anwendung ordnungsgemäß ausgeführt wird. Diese Lösung ist speziell für OSX, aber kann es sein, anwendbar auf iOS als auch.
Herunterladen und fügen Sie diese header-Datei in Ihrem Projekt. Es ist nicht enthalten in der XCode-Webkit-Verteilung.
klicken Sie auf download WebStorageManagerPrivate.h
Hinzufügen, die folgenden Zeilen:
Diese können Sie abrufen, das Verzeichnis für die WebKit local storage tracker-Datenbank. Dies ist wichtig, da durch einen bug in WebKit, wenn Sie nicht speichern Sie Ihre LocalStorage-WebView-Dateien im gleichen Verzeichnis wie die tracker-Datenbank, werden Sie gelöscht, jedesmal, wenn Sie Ihre Anwendung ausführen. Ich habe nicht einen Weg finden, in die WebStorageManager code zum ändern des Speicherorts für eine einzelne Anwendung. Es ist immer ausgelesen und der Benutzer-Einstellungen.
Gehören die WebStorageManagerPrivate.h in Ihrem appDelegate.
Müssen Sie herunterladen und in Ihrem Projekt einen anderen header nicht enthalten in XCode Verteilung. Speichern Sie es als WebPreferencesPrivate.h
klicken Sie auf download WebPreferencesPrivate.h
Gehören die WebPreferencesPrivate.h in Ihrem appDelegate.
Nun verwenden Sie den folgenden code in Ihre applicationDidFinishLaunching handler zu initialisieren und zu aktivieren, "LocalStorage". Der code angenommen, Sie haben ein IBOutlet den Namen "webView" für die WebView, die Sie verwenden.
Ich hoffe, dies hilft anderen gekämpft haben oder noch kämpfen mit diesem Problem, bis es behoben ist ordnungsgemäß innerhalb von WebKit.
Welches Problem tritt auf? Fehler? nicht sparen? Ich habe es getestet unter 10.7 in Ordnung.
Unter 10.11 (El Capitan) dieser nicht mehr funktioniert. Ich musste greifen, um die überbrückung zu native-code für das speichern und laden von Operationen. Zur Minimierung der Veränderung von Javascript, können Sie überschreiben die standard - "set" und "get" - Funktionen in den Speicher.Prototyp und rufen Sie Ihren bridge-Funktionen. Apple Schloss die Lücke in Ihrer Sicherheit Handhabung von speichern localStorage-für Webkit-apps mit lokalen Datei verweist.
InformationsquelleAutor Derek Wade