Android Application 和Webview 之间的交互

来源:互联网 发布:这两天网络怎么了 编辑:程序博客网 时间:2024/06/06 09:03

1.     创建和设置WebViewClient子类。当一些可以影响渲染内容是它会被调用,例如,表单提交错误提示。也可以通过shouldOverrideUrlLoading()拦截URL的加载()。

2.     addJavascriptInterface(Object obj, String interfaceName)使用这个方法绑定到JavaScript,使JavaScript可以调用此方法。

重要事项:

使用addJavascriptInterface()允许JavaScript来控制您的应用程序。这可以是一个非常有用的功能或一个危险的安全问题。当不可信(例如,部分或全部的HTML是由某些人或过程提供)的WebView的HTML时,攻击者可以注入的HTML,将执行你的代码和可能的攻击者选择的任何代码。
不要使用addJavascriptInterface(除非在此的WebView的HTML),是由你写成的。

在另一个线程,而不是在线程绑定的Java对象运行,它被修建英寸

参数

OBJ

类的实例绑定到JavaScript,空实例被忽略。

InterfaceName中

该名称用于暴露在JavaScript中的实例。

 

3.     loadUrl(Stringurl, Map<String, String> additionalHttpHeaders)使用这个方法可以在加载网页时带HttpHeaders。

4.     postUrl(Stringurl, byte[] postData)请求网页时带有post数据。

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.view.Window;import android.webkit.JsPromptResult;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Toast;;/** * @author  *  */public class RegisterActivity extends Activity {private final static String tag = "RegisterActivity";WebView mWebView;Activity mActivity;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().requestFeature(Window.FEATURE_PROGRESS);setContentView(R.layout.register);mActivity = this;mWebView = (WebView) findViewById(R.id.register_webview);mWebView.getSettings().setJavaScriptEnabled(true);mWebView.getSettings().setBuiltInZoomControls(true);mWebView.getSettings().setDefaultTextEncodingName("UTF-8");mWebView.setWebChromeClient(mWebChromeClient);mWebView.setWebViewClient(mWebViewClient);mWebView.addJavascriptInterface(obj, "customFuction");mWebView.loadUrl(QingUtil.URL_REGISTER);// mWebView.loadUrl("file:///android_asset/test.html");// mWebView.loadUrl("http://www.baidu.com");}Object obj = new Object() {public void getMessage(String str) {Toast.makeText(getBaseContext(), "Application-getMessage:" + str,3000).show();}};WebChromeClient mWebChromeClient = new WebChromeClient() {@Overridepublic boolean onJsAlert(WebView view, String url, String message,JsResult result) {Toast.makeText(getBaseContext(),"onJsAlert - url:" + url + " message:" + message, 3000).show();return super.onJsAlert(view, url, message, result);}@Overridepublic boolean onJsConfirm(WebView view, String url, String message,JsResult result) {Toast.makeText(getBaseContext(),"onJsConfirm - url:" + url + " message:" + message, 3000).show();return super.onJsConfirm(view, url, message, result);}@Overridepublic boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) {// TODO Auto-generated method stubreturn super.onJsPrompt(view, url, message, defaultValue, result);}@Overridepublic void onProgressChanged(WebView view, int newProgress) {mActivity.setProgress(newProgress);Log.d("Test", "newProgress = " + newProgress);super.onProgressChanged(view, newProgress);}};WebViewClient mWebViewClient = new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {Log.d(tag, "shouldOverrideUrlLoading - " + url);if (url.startsWith("sms:")) {Intent sendIntent = new Intent(Intent.ACTION_VIEW);sendIntent.putExtra("address", url.replace("sms:", ""));sendIntent.setType("vnd.android-dir/mms-sms");startActivity(sendIntent);return true;}return super.shouldOverrideUrlLoading(view, url);}@Overridepublic void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {Toast.makeText(mActivity, "Oh no! " + description,Toast.LENGTH_SHORT).show();super.onReceivedError(view, errorCode, description, failingUrl);}};
test.html文件
<html xmlns="http://www.w3.org/1999/xhtml"><head> <script type=text/JavaScript>  function alertFuction(){   var a=1;   var b=2;   alert(a+b);  }  function confirmFuction(){   confirm("你确定要删除吗?");  }  function setText(){    alert("js中的方法");  }</script><input onclick=alertFuction() type=button value=alertFuction><input onclick=confirmFuction() type=button value=confirmFuction><input onclick="javascript:window.customFuction.getMessage('js中的字符串')" type=button value=customFuction>


原创粉丝点击