• 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 "";   } }
  • 相关阅读:
    Bootstrap-table一个表格组件神器(学习二)实战
    JS基础_for循环练习3
    JS基础_for循环练习2
    JS基础_for循环练习1
    JS基础_for循环
    JS基础_while的练习2
    JS基础_while的练习1
    JS基础_while循环
    JS基础_条件分支语句:switch语句
    JS基础_if注意问题
  • 原文地址:https://www.cnblogs.com/flowers-yang/p/3381343.html
Copyright © 2020-2023  润新知