android加载html,以及js通讯

最近有个项目需要开发一个简单的apk,两年没碰android了,突然要用还真不能适应,基本上都忘了。。

加载sd卡中的html

1.  loadUrl
直接可以加载html文件,没发现什么问题
webview.loadUrl("file:///mnt/sdcard/webview_demo/jsurvey/test.html" );

2. loadData
首先特殊字符要转化 
private String changeEscape(String data) {
    if(data != null){
        //                #,                 %,                 \ ,         ?
        //转换成        %23,         %25,         %27,         %3f
        data = data.replaceAll("#", "%23");
        data = data.replaceAll("%", "%25");
        data = data.replaceAll("\\\\", "%27"); //正则转义\\, 每个\在java中也要转义一下,所以就变成了\\\\
        data = data.replaceAll("\\?", "%3f"); //正则转义\?, \在java中要转义一下,于是\\?
    }
    return data;
}

如果引用的文件不使用绝对路径的话,会显示空白
使用绝对路径的话,会报错


目前没找到有引用文件时一定要使用loadData的解决办法。
还是退一步,使用loadDataWithBaseUrl吧。

3. loadDataWithBaseUrl

如果有引用的js文件和css文件,引用的文件要使用绝对路径

<script src="file:///mnt/sdcard/webview_demo/jsurvey/js/jquery-1.7.1.js"></script>
<link rel="stylesheet" href="file:///mnt/sdcard/webview_demo/jsurvey/css/survey.css?v=3">   

html 页面及与 js 间的相互调用 

android 学习笔记之加载 html 页面及与 js 间的相互调用 
main 中:
<WebView 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/webView"
/>

Activity 中: public class HtmlUIActivity extends Activity { private WebView webview; public Handler handler; @Override public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);   webview = (WebView)this.findViewById(R.id.webView);   webview.getSettings().setJavaScriptEnabled(true); //开启 javascript 支持   webview.getSettings().setSupportZoom(false);   webview.getSettings().setAppCacheEnabled(false);   webview.getSettings().setAllowFileAccess(true);   // java 把数据传给 js   // js 中可以利用“myjs”来调用 show 方法,myjs 就相当于一个 MyJavaScript 对象   // 可以调用 MyJavaScript 中的方法   webview.addJavascriptInterface(new MyJavaScript(this, handler), "myjs");   String url = "file:///android_asset/index.html"; // assets 下的路径   webview.loadUrl(url); }
与 js 通信的类:
public class MyJavaScript {   private Context context;   private WebView webview;   private Handler handler;
  
public MyJavaScript(Context context, Handler handler) {     this.context = context;     this.handler = handler;     webview = (WebView)((Activity)context).findViewById(R.id.webView);   }   // 在 java 中调用 js 中的 contactlist()方法,并传参数   public void show() {     handler.post(new Runnable() {       @Override       public void run() {         webview.loadUrl("javascript:contactlist('" + query() + "')");       }
    });   }   
// 打电话(要加拨打权限)   public void call(final String phone) {     handler.post(new Runnable() {       @Override       public void run() {         context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+phone)));       }     });   }
  
public String query() {     try {       JSONObject jsonObject = new JSONObject();       jsonObject.put("id", 56);       jsonObject.put("name", "胡一刀");       jsonObject.put("phone", "151--323");       JSONObject jsonObject2 = new JSONObject();       jsonObject2.put("id", 96);       jsonObject2.put("name", "胡勇");       jsonObject2.put("phone", "151--326");       JSONArray jsonArray = new JSONArray();       jsonArray.put(jsonObject);       jsonArray.put(jsonObject2);       return jsonArray.toString();     } catch (JSONException e) {     }     return "";   } }
posted @ 2013-10-21 21:04  无心花  阅读(1128)  评论(0编辑  收藏  举报