android webview js 交互

在WebView中使用JavaScript进行交互,加载的网页可以是本地也可以是服务器上的。

前提,将webSettings调用setJavaScriptEnabled(true),使得本地支持支持js:
WebView webView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

再者,Android代码要和js交互,JavaScript代码调用Android代码中的方法或者Android代码调用JavaScript代码中的方法,可以在JS和Android代码间绑定一个新的接口,需要调用addJavascriptInterface()方法。
方法参数传入一个Java对象实例和一个字符串,该字符串是一个名字(interface name,注意此接口不是通常所说的用来实现的接口,而是传入的这个对象在JS中的别名),在JS代码中用此名字调用该Java对象的方法。

为了安全考虑,在API 17以后,只有被JavascriptInterface注解标识的公有方法才可以被JS代码访问,注意必须是public方法。

一、JavaScript调用Android代码中方法的例子

1.先定义一个交互的类
public class AndroidForJs {

    private static String TAG = "AndroidForJs";

    private Context context;

    public AndroidForJs(Context context) {
        this.context = context;
    }

    //api17以后,只有public且添加了 @JavascriptInterface 注解的方法才能被调用
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(context, "调用showToast:" + toast, Toast.LENGTH_SHORT).show();
    }

}


2.将这个类与WebView中的JS代码绑定:

webView.addJavascriptInterface(new AndroidForJs(this),"JavascriptInterface");
这样就创立了一个接口名,叫“JavascriptInterface”,运行在WebView中的JS代码可以通过这个名字调用AndroidForJs类中的showToast()方法


3.JS中的方法实现



<script type="text/javascript">
    function showAndroidToast(toast) 
    {
        JavascriptInterface.showToast(toast);
    }
</script>


二、Android调用JavaScript代码中方法的例子

需要调用的时候只需要一行代码:

webView.loadUrl("javascript:myFunction()");
其中myFunction()是JS函数。

如果JavaScript函数是带参数的,那么调用时要特别注意。

function writeLine(string)
    {
        console.log("Write a new Line");//调试信息
        document.getElementById("content").innerHTML += string + "
";//在content标签段落加入新行 }


注:其中content是自定义的标签,html中有一个段落是:

    <p id="content"></p>

那么在Android代码中调用这个writeLine()函数时,需要传入一个字符串参数,比如,想要传入一个叫name的String:

webView.loadUrl("javascript:writeLine('"+name+"')");//JS代码要是带参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值