2

我正在显示一个带有远程 html 内容的 webview 作为来自远程服务器的字符串。我将 html 存储在本地,以便在没有连接的情况下使用我的应用程序。

此外,我还在本地存储了一个 .js 脚本和一个 .css 样式文件。这些文件可以由服务器更新。

我将所有这些文件存储在以下路径:

context.getFilesDir()+"content.css"
context.getFilesDir()+"content.js"

在 html 字符串中,css 和 js 的引用如下:

<link rel="stylesheet" href="/content.css" type="text/css" media="screen">                                            
<script src="/content.js"></script>

我使用加载html

this.webView.loadDataWithBaseURL(getFilesDir().getAbsolutePath(), html, "text/html", "utf-8", "about:blank");

但是没有考虑到样式和js,所以我认为我用来引用它们的路径有问题,或者加载webView。那么这样做的方法是什么?我找到了许多使用“assets”文件夹的答案,但我不想使用它,因为我必须从服务器更新 css 和 js。

4

1 回答 1

4

最后我找到了解决方案:

  • 使用此方法将 css(或 js)文件保存在本地:

    public static void writeToFile(Context context, String content, String title) throws IOException {
    OutputStreamWriter osw = new OutputStreamWriter(context.openFileOutput(title,Context.MODE_WORLD_READABLE)); osw.write(content); osw.close(); }

  • 然后我在 html 文件中使用

    <link rel="stylesheet" href="content.css" type="text/css" media="screen">
    <script src="content.js"></script>

  • 最后,我使用以下命令打开了 webview:

    this.webView = (WebView) findViewById(R.id.webview); this.webView.getSettings().setJavaScriptEnabled(true); this.webView.getSettings().setPluginsEnabled(true); this.webView.setHorizontalScrollBarEnabled(false); this.webView.setVerticalScrollBarEnabled(true); this.webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); this.webView.setWebViewClient(this.controller.getWebViewClient()); String basePath = "file://"+getFilesDir().getAbsolutePath()+"/"; this.webView.loadDataWithBaseURL(basePath, data, "text/html", "utf-8", "about:blank");

于 2012-07-24T15:21:56.230 回答