1

リモート Web ページをロードする Android webView があります。このページのコードは同僚によって管理されているので、同僚に変更を依頼することはできますが、完全にクライアント側で解決策を見つけたいと思います。

トラフィックとパフォーマンスに関する理由から、css と javascript ファイルをクライアントにローカルに保存し、サーバーからロードしないようにします。

私が思いついたのは 2 つのアイデアですが、これまでのところどれもうまくいきませんでした。

  1. すべてのファイルをアセット フォルダーに格納し、html でそれらを参照するようにします。

    問題: webview が "file:///..." URL へのアクセスを許可されていないようです

    質問: この問題を回避する方法はありますか?

  2. html 内のこれらの参照をすべて無視し、それらのファイルを webview にロードした後にすべてのファイルを挿入するだけです。

    質問: これらのファイル (.css / .js) を既にロードされている html に追加するにはどうすればよいですか?

4

1 に答える 1

2

次の方法でローカル WebView を構築できます。

  • アクティビティ (LocalWebviewActivity.java)
  • レイアウト (activity_localwebview.xml)
  • Assets フォルダー (「assets」フォルダーのルートに、フォルダー「css」を作成し、ここに「style.css」を配置します)
  • CSS スタイルシートを参照するのと同じ方法で JS ファイルを参照します。

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>
于 2013-03-28T14:55:02.627 に答える