webview实践

webview与javascript交互

webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new ClickModel(this), "js");
第一句为设置与javascripte能够交互,第二句设置交互操作。

这里的ClickModel:
public class ClickModel {
    private Context mContext;
    public ClickModel(Context context){
        this.mContext = context;
    }

    @JavascriptInterface
    public void clicks(){
        Toast.makeText(mContext,"click from js",Toast.LENGTH_SHORT).show();
    }
}
在你提供给JavaScript调用的方法上加上注解 @JavascriptInterface。

assets下的input.html:

<Html>
<head>
    <script type="text/javascript" charset="utf-8">
        function call(){
            js.clicks();
        }
    </script>
</head>
<body>
    <input type="button" value="dianji" οnclick="call()">
    <a href="kedou://com.example.webview.DemoActivity">DemoActivity</a>
</body>
</Html>
此处就是点击“dianji"按钮,执行javaScript的call方法。call中调用了由webView.addJavascriptInterface(new ClickModel(this), "js")产生的方法。
这种方式在android 4.2之前webview有远程注入的安全问题,4.2之后google修复了这个问题。那么,在开发中,尽量少用这个方式,推荐用第二种方式,也就是url的方式。

url方式

也就是input.html的body中的<a>的方式。本例中 <a href="kedou://com.example.webview.DemoActivity">DemoActivity</a>,点击这个超链接,目的是要跳到DemoActivity.
在shouldOverrideUrlLoading()方法中处理超链接中的url.

webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.e("override_url", url);
                if(url.startsWith("kedou://")){
                    String temp = url.substring(8);
                    try {
                        Class desClass = Class.forName(temp);
                        startActivity(new Intent(JsActionActivity.this, desClass));
                    } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                    }

                    return true; //主应用程序处理
                }
                view.loadUrl(url);
                return super.shouldOverrideUrlLoading(view, url);   //webview处理
            }

url 处理,反射获取 class ,然后跳到目标 activity ,最后要 return true, 表示有主程序处理。


效果图:



java调用js方法参考JS与Native交互

如果要求更高的安全性,可用第三方组件,详细参考https://github.com/pedant/safe-java-js-webview-bridge

源码:http://yunpan.cn/cm7Qk4JVMuRXT (提取码:64d5)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值