将资产文件夹中的本地css / js文件添加到远程网页

时间:2013-03-28 12:07:30

标签: android

我有一个Android webView,可以加载远程网页。由于这个页面的代码是由同事控制的,我可以让他改变它,但我更愿意在客户端找到一个完全的解决方案。

由于有关流量和性能的原因,我们希望在客户端本地存储我们的css和javascript文件,而不是从服务器加载它们。

我想出的是两个想法,但到目前为止还没有一个想法。

  1. 将所有文件存储在资产文件夹中,并让html引用它们

    问题:似乎不允许webview访问“file:/// ...”urls

    问题:有没有办法解决这个问题?

  2. 只需忽略html中的所有引用,只需在webview中加载后注入所有这些文件

    问题:我如何将这些文件(.css / .js)添加到我已加载的html中?

1 个答案:

答案 0 :(得分:2)

您可以按以下方式构建本地WebView

  • 活动(LocalWebviewActivity.java)
  • 布局(activity_localwebview.xml)
  • Assets文件夹(在“assets”文件夹的根目录下,创建文件夹“css”并在此处放置“style.css”)
  • 您引用JS文件的方式与引用CSS StyleSheets相同

LocalWebviewActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class LocalWebviewActivity extends Activity {

    WebView myWebView;
    StringBuilder mySBcontent;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_localwebview);

        myWebView = (WebView) findViewById(R.id.webkit);
        mySBcontent = new StringBuilder();

        mySBcontent.append("<html>");
        mySBcontent.append("<head>");
        mySBcontent.append("<link type='text/css' rel='stylesheet' href='css/style.css'>");
        mySBcontent.append("</head>");
        mySBcontent.append("<body>");
        mySBcontent.append("<h1>My Heading</h1>");
        mySBcontent.append("<p>My HTML content</p>");
        mySBcontent.append("<p><img style='width:150px;' src='myImg.png' /></p>");
        mySBcontent.append("</body>");
        mySBcontent.append("</html>");

        myWebView.loadDataWithBaseURL("file:///android_asset/", mySBcontent.toString(), "text/html", "UTF-8", "");
    }
}

activity_localwebview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <WebView 
        android:id="@+id/webkit"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</LinearLayout>