Android WebView Js 交互以及Js传参

来源:互联网 发布:知之者不如好之者的者 编辑:程序博客网 时间:2024/06/08 14:44

先贴上代码,代码里面有注释,通俗易懂

       @SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })// 设置本地调用对象及其接口供JS调用,要加上此说明    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);              wb_main = (WebView) findViewById(R.id.wb_main);              wb_main.setWebChromeClient(new WebChromeClient());// 让 JS Alert 生效              wb_main.setWebViewClient(new WebViewClient() {// WebView里面打开新链接不调用系统浏览器打开      @Override              public boolean shouldOverrideUrlLoading(WebView view, String url) {                     return false;      }      });              // 设置编码              wb_main.getSettings().setDefaultTextEncodingName("utf-8");              // 支持js              wb_main.getSettings().setJavaScriptEnabled(true);              // 设置背景颜色 透明              wb_main.setBackgroundColor(Color.argb(0, 0, 0, 0));              // 设置本地调用对象及其接口,供JS调用              wb_main.addJavascriptInterface(new OpenToJs(getBaseContext()), "up_java");              // 载入js              wb_main.loadUrl("file:///android_asset/demo.html");              }

供JS调用的类代码

public class OpenToJs {private Context mContxt;public OpenToJs(Context mContxt, Handler handler) {this.mContxt = mContxt;}       @JavascriptInterface // sdk17版本以上加上注解public void Android_SendData(String data)}}

调用JS方法以及传参

wb_main.loadUrl("javascript:页面JS函数名"('" + strFunId + "','" + strData + "')");

WebView.loadUrl 不仅可以加载链接,还可以加载JS函数名,还可以加载JS语句

比如我们的JS函数是需要一个JSON数据变量,我们可以这样写

wb_main.loadUrl("javascript:var data=eval('" + strData + "');页面JS函数名"('" + strFunId+ "',data)");

所以这样的话,不管JS函数需要什么类型的参数,我们都可以在调用这个函数之前,预先实现这个类型的变量再传过去

0 0