我有一个Android webView,可以加载远程网页。由于这个页面的代码是由同事控制的,我可以让他改变它,但我更愿意在客户端找到一个完全的解决方案。
由于有关流量和性能的原因,我们希望在客户端本地存储我们的css和javascript文件,而不是从服务器加载它们。
我想出的是两个想法,但到目前为止还没有一个想法。
将所有文件存储在资产文件夹中,并让html引用它们
问题:似乎不允许webview访问“file:/// ...”urls
问题:有没有办法解决这个问题?
只需忽略html中的所有引用,只需在webview中加载后注入所有这些文件
问题:我如何将这些文件(.css / .js)添加到我已加载的html中?
答案 0 :(得分:2)
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", "");
}
}
<?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>