7

我们正在开发一个 JavaFX 2.x 应用程序,它需要提供一些 GIS 支持。我们得出结论,通过嵌入式 WebView 使用 GoogleMaps 是最快的选择。它的问题是每次我们的应用程序启动时,都会下载相应的 JavaScript 库。这使得开发变得非常困难,因为在 WebView 面板上进行任何交互之前需要几秒钟的时间。

首先想到的是像 Web 浏览器那样进行某种缓存,以便存储库并在需要时在本地读取它们。使用 WebView 如何实现这一点?在我们的案例中,是否有缓存的替代方案?

谢谢。

4

1 回答 1

10

WebView 组件不提供开箱即用的 Web 资源缓存。但是,它确实利用 java.net 堆栈进行网络通信。这意味着您可以安装自己的 URL 处理程序,该处理程序与缓存通信并从该缓存中提供资源。例如,main()在 JavaFX 启动调用之前在您的方法中放置类似以下的块:

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;
    }
});

当然,魔鬼在细节中。在缓存中存储资源时,您应该考虑 HTTP 标头(如ETags )返回的缓存策略。另一个考虑因素是 HTML 元标记。 是一个关于缓存的好资源。

您可能还想考虑一个 cookie 管理系统来补充这个缓存管理系统。

于 2012-09-18T22:09:06.003 回答