2012-08-15 23 views
6

Wir entwickeln eine JavaFX 2.x-Anwendung, die einige GIS-Unterstützung bereitstellen muss. Wir sind zu dem Schluss gekommen, dass die Verwendung von Google Maps über ein eingebettetes WebView die schnellste Option ist. Das Problem dabei ist, dass bei jedem Start unserer Anwendung die entsprechenden JavaScript-Bibliotheken heruntergeladen werden. Dies macht die Entwicklung sehr schwierig, da es einige Sekunden dauert, bevor etwas Interaktives im WebView-Panel durchgeführt werden kann.Caching in JavaFX WebView

Die erste Sache, die in den Sinn kommt, ist eine Art Zwischenspeicherung wie Webbrowser tun, um die Bibliotheken zu speichern und sie bei Bedarf lokal zu lesen. Wie kann dies mit WebView erreicht werden? Gibt es in unserem Fall Alternativen zum Caching?

Danke.

Antwort

8

Die WebView-Komponente bietet kein sofortiges Caching von Webressourcen. Allerdings verwendet es den java.net-Stack für die Netzwerkkommunikation. Dies bedeutet, dass Sie Ihren eigenen URL-Handler installieren können, der mit einem Cache kommuniziert und Ressourcen aus diesem Cache bereitstellt. Zum Beispiel setzte so etwas wie dieser Block in Ihrem main() Verfahren vor dem JavaFX Start Aufruf:

URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory() { 
    public URLStreamHandler createURLStreamHandler(String protocol) { 
     if ("http".equals(protocol)) { 
      return new URLStreamHandler() { 
       protected URLConnection openConnection(URL u) throws IOException { 
        if (isCached(u)) { 
         return new CachedStreamConnection(u); 
        } 
        return new MyURLConnection(u); 
       } 
      }; 
     } 
     // Don't handle a non-http protocol, so just return null and let 
     // the system return the default one. 
     return null; 
    } 
}); 

Natürlich steckt der Teufel im Detail. Sie sollten die Cache-Richtlinien, die von den HTTP-Headern zurückgegeben werden (wie ETags) berücksichtigen, wenn Sie eine Ressource in Ihrem Cache speichern. Eine weitere Überlegung sind HTML-Meta-Tags. Here ist eine gute Ressource für das Zwischenspeichern.

Sie sollten auch ein Cookie-Management-System in Betracht ziehen, das dieses Cache-Management-System ergänzt.

Verwandte Themen