2009-05-22 5 views
4

Ich habe eine Cocoa-App mit einem WebView. Das Targeting auf das 10.4 SDK erfolgt aufgrund des installierten Kundenstamms der App. (d. h. ich kann Leopard nicht benötigen.)Cocoa - Verhindert das Zwischenspeichern von Javascript in WebKit - Safari Beta 4 Bug?

Ich habe zwei Dateien: index.html und data.js.

Zur Laufzeit schreibe ich als Antwort auf Benutzereingaben die Datei data.js und befülle sie häufig mit aktuellen Daten aus der App.

(Die data.js Datei von der Datei index.html auf die Körperlast verwendet wird, in der index.html Tabellen. Index.html sich nicht geändert.)

Um (angeblich) zu verhindern, WebKit-Caching meiner oft wechselnden Daten, rufe ich:

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:indexFileURL cachePolicy: NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 

und

[[myWebView mainFrame] loadRequest: urlRequest]; 

Das funktioniert sehr gut in Tiger und Leopard.

Es schlägt jedoch in Leopard fehl, wenn Safari Beta 4 installiert ist. Die Zeichnung der Datei index.html in der Webansicht berücksichtigt nicht die aktuellen Änderungen an der Datei data.js. Es scheint, dass die Javascript-Datei (data.js) tatsächlich zwischengespeichert wird, unabhängig von der Cache-Richtlinie der URL.

Als Workaround habe ich versucht, [[myWebView mainFrame] reload] nach dem LoadRequest aufrufen, aber das verursacht andere Probleme. (Das Webview wird überhaupt nicht aktualisiert.)

Kann jemand vorschlagen, dieses Verhalten zu beheben oder zu umgehen? Vielen Dank.

Antwort

4

keine Lösung, sondern eine Abhilfe, die funktionieren könnte:

Probieren Sie etwas wie „version = some_random_number?“, Um Ihre URL angehängt wird, mit einer anderen Zufallszahl jedes Mal, wenn Sie neu zu laden. Meiner Erfahrung nach ist das ziemlich effektiv, Webkit zum Nachladen zu zwingen.

+0

Vielen Dank für die Hilfe. Ich habe gerade Ihre Herangehensweise versucht, aber leider wird das Javascript noch im Cache gespeichert. :( – SirRatty

+0

Ich habe eine Problemumgehung basierend auf Ihrem Ratschlag erstellt. Anstatt die index.html-Datei als eine URL zu laden, lese ich jetzt den Inhalt der Datei als ein NSString. Ich ändere dann diese Zeichenfolge an dem Punkt, wo die HTML für „data.js“ suchen zu lesen:. data.js cacheBaffler = 1234; // einige zufällige Zahl ich dann loadHTMLString auf der Webansicht Mainframe nennen Dies funktioniert interessant. Datenpunkt: Ohne die Änderung des Dateinamens verwendet loadHTMLString das Caching sowohl in Tiger als auch in Leopard, unabhängig von Safari 4 Beta. Großartig für Browser-Testergebnisse ... – SirRatty

+0

Schön, dass es geklappt hat :) –

2

[closing nur diese eine off]

Javascript noch zwischengespeichert wird in Safari 4 final, unabhängig von Cache-Flags. Enttäuschend, vor allem angesichts der Tatsache, dass dies bekannt ist. Ich vermute stark, dass die Notwendigkeit der Vermarktung von Punkt- und Testergebnissen in den Browser-Kriegen sich über die Notwendigkeit von korrekt funktionierendem Code durchgesetzt hat.

Die Problemumgehungen (siehe die folgenden Kommentare) funktionieren jedoch.