webview知识

来源:互联网 发布:windows手机系统下载 编辑:程序博客网 时间:2024/05/29 14:12

 webview与javascript的交互

1.java调用javascript

                            在javascript中定义好一个方法然后再java中调用
                             mWebView.loadUrl("javascript:方法名"); 

2.javascript调用java代码

               java代码
                         mWebView.addJavascriptInterface(new AClass(){
                                 aMethod(){}
                            }, "demo");  

               javascript代码调用java中的方法
                          window.demo.aMethod()


//
                HttpPost httppost = new HttpPost(Constants.ServerUrl.WEB_URL + url);
                try {
 
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
 
                        // Your DATA
                        nameValuePairs.add(new BasicNameValuePair("UserName", map
                                        .get("UserName")));
 
                        nameValuePairs.add(new BasicNameValuePair("Password", map
                                        .get("Password")));
 
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
 
                        HttpResponse response;
 
                        response = httpclient.execute(httppost);
                        if (response.getStatusLine().getStatusCode() == 200) {
                                
                                String result = EntityUtils.toString(response.getEntity());
                                // SharedPreferences preferences = context.getSharedPreferences(
                                // "login", Context.MODE_PRIVATE);
                                // Editor editor = preferences.edit();
                                // String handlers = "";
                                String cookie = "";
                                Date sessionTime = new Date();
                                List<Cookie> cookies = httpclient.getCookieStore().getCookies();
                                if (!cookies.isEmpty()) {
                                        for (int i = 0; i < cookies.size(); i++) {
                                                cookie = cookies.get(i).getName() + "="
                                                                + cookies.get(i).getValue() + ";domain="
                                                                + cookies.get(i).getDomain();
                                                ;
                                                sessionTime = cookies.get(i).getExpiryDate();
                                        }
                                }
                              
                                PersistentConfig config = new PersistentConfig(context);
                                config.setCookie(cookie);
 
                                config.setSessionTime(sessionTime.getTime());
                                // for (int i = 0; i < response.getAllHeaders().length; i++) {
                                // if (response.getAllHeaders()<i>.toString().contains(
                                // "set-cookie")) {
                                // handlers += response.getAllHeaders()<i>.toString();
                                // break;
                                // }
                                // }
                                //
                                // editor.putString("cookies",
                                // response.getHeaders("Set-Cookie")[0].toString());
                                // editor.commit();
                                return result;
                        }
 
                } catch (ClientProtocolException e) {
 
                        // TODO Auto-generated catch block
 
                        e.printStackTrace();
 
                } catch (IOException e) {
 
                        // TODO Auto-generated catch block
 
                        e.printStackTrace();
 
                }



        
        main_view = (WebView) findViewById(R.id.main_webview);
        new WebViewTask().execute();
         
        private class WebViewTask extends AsyncTask<Void, Void, Boolean> {
                String sessionCookie;
                CookieManager cookieManager;
 
                @Override
                protected void onPreExecute() {
                        CookieSyncManager.createInstance(MainActivity.this);
                        cookieManager = CookieManager.getInstance();
 
                        sessionCookie = new PersistentConfig(getApplicationContext())
                                        .getCookieString();
                        if (sessionCookie != null) {
                                // delete old cookies
                                cookieManager.removeSessionCookie();
                        }
                        super.onPreExecute();
                }
 
                protected Boolean doInBackground(Void... param) {
                        // this is very important - THIS IS THE HACK
                        SystemClock.sleep(1000);
                        return false;
                }
 
                @Override
                protected void onPostExecute(Boolean result) {
                        if (sessionCookie != null) {
                                cookieManager.setCookie(Constants.ServerUrl.WEB_URL,
                                                sessionCookie);
                                CookieSyncManager.getInstance().sync();
                        }
                        main_view.setScrollbarFadingEnabled(true);
                        main_view.getSettings().setPluginsEnabled(true);
                        main_view.getSettings().setPluginState(PluginState.ON);
                        main_view.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
                        WebSettings webSettings = main_view.getSettings();
                        webSettings.setJavaScriptEnabled(true);
                        webSettings.setAllowFileAccess(true);
                        webSettings.setBuiltInZoomControls(true);
                        main_view.setWebViewClient(new WebViewClient() {
                                @Override
                                public void onPageStarted(WebView view, String url,
                                                Bitmap favicon) {
                                        // TODO Auto-generated method stub
                                        super.onPageStarted(view, url, favicon);
                                }
 
                                @Override
                                public void onLoadResource(WebView view, String url) {
                                        // history();
                                }
                        });
                        main_view.setWebChromeClient(new WebChromeClient() {
                                public void onProgressChanged(WebView view, int progress) {
                                        //Change
                                }
                        });
                        ShowUrlView(Constants.ServerUrl.INDEX);
                }
        }


加载远程的页面webview.loadUrl("http://www.baidu.com");
家在本地asset目录下的页面upperView.loadUrl("file:///android_asset/icon.png");
编辑html并加载的方法是String htmlString = "<h1>Header</h1><p>this is html text</p>" +"<i>format in italics</i>";
lowerView.loadData(htmlString, "text/html", "utf-8");
在webview中按回退键的时候的处理
public boolean onKeyDown(int keyCode,KeyEvent event){
if((keyCode==KeyEvent.KEYCODE_BACK)&&webview.canGoBack()){
webview.goBack();
return true;
}
return super.onKeyDown(keyCode,event);
}

在webview中加上两个浏览器
webview.setWebViewClient(mClient);主要用来处理界面相关的事情
webview.setWebChromeClient(cClient);主要处理js交互的问题

private WebViewClient mClient = new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
Uri request = Uri.parse(url);
if(TextUtils.equals(request.getAuthority(), "www.baidu.com")){
return true;
}
/* Toast.makeText(getApplicationContext(), "Sorry", 1).show();
return true;
这样做的话就是自己处理了,不再转交给activitymanager来处理
*/

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(request);
startActivity(intent);
return true;
}

@Override
public void onPageFinished(WebView view, String url) {
dialog.dismiss();
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
if(dialog == null|| !dialog.isShowing()){
dialog = new ProgressDialog(ctx);
dialog.setMessage("getting data please wait a second");
}
dialog.show();
}
};


WebChromeClient
private WebChromeClient cClient = new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
dialog.setMessage("have loaded "+newProgress+"");
}

};




       

原创粉丝点击