android Javascript交互

    12.8  青岛  阴

    网上一搜一大把的东西,新开一贴记录下,已被自己不时之需

    自己知道的android 里面与javascript交互式实现有两种,第一种比较实用,稍微麻烦;第二种实现简单,但是有局限性。

    第一种:通过webview的addjavascript方法实现

        //设置编码  
        wb.getSettings().setDefaultTextEncodingName("utf-8");
        //支持js
        wb.getSettings().setJavaScriptEnabled(true);
        //设置背景颜色 透明
        wb.setBackgroundColor(Color.argb(0, 0, 0, 0));
        //设置本地调用对象及其接口
        wb.addJavascriptInterface(new JavaScriptObject(this), "myObj");
        //载入js
        wb.loadUrl("file:///android_asset/hh.html");

        //点击调用js中方法
        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                wb.loadUrl("javascript:displayDate()");//调用js里面的方法
            }
        });
定义出被js调用的方法。
public class JavaScriptObject {

    Context mContxt;

    public JavaScriptObject(Context mContxt) {
        this.mContxt = mContxt;
    }
    @JavascriptInterface  //sdk17以后一定要有,而且写在躯体的方法前面,要不js不识别
    public void fun1FromAndroid(String name) {
        Toast.makeText(mContxt, name, Toast.LENGTH_LONG).show();
    }
    @JavascriptInterface
    public void fun2(String name) {
        Toast.makeText(mContxt, "调用fun2:" + name, Toast.LENGTH_SHORT).show();
    }
}

再看一下 html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>花重锦官城的博客(http://blog.csdn.net/a1021508536)</title>
<script>
var a=1;
function displayDate(){
	if(a%2==1){
	document.getElementById("demo").innerHTML=Date();}
	else{
	document.getElementById("demo").innerHTML="这是一个段落";

	}
	a++;	
}
function displayDate2(){
	myObj.fun1FromAndroid("来自手机");
}

</script>
</head>
<body>

<h1>我的第一个 JavaScript 程序</h1>
<p id="demo">这是一个段落</p>

<button type="button" οnclick="displayDate()">显示日期</button>
<button type="button" οnclick="displayDate2()">调用android</button>
</body>
</html>
button点击后会掉用js的displayData() 方法。 而,html中的button2点击后会调用app中的fun1FromAndroid()方法,这样就实现了与javascript的交互了。

第一种的项目连接    点击打开链接

    第二种 通过 webview的setWebViewClient() 方法监听。

 wvWebview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (MyHttpConfig.toFirst.equals(url)) {   //将该url与一直的操作的url对比 判断
                    WebViewActivity.this.finish(); 
                } else if (MyHttpConfig.toLogin.equals(url)) {  
                    startActivity(new Intent(WebViewActivity.this, LoginActivity.class));
                } else
                    view.loadUrl(url);// 当打开新链接时,使用当前的 WebView,不会使用系统其他浏览器
                return true;
            }
        });
这种方式的原理是获取到webview的变化状态及变化的url,将url进行对比,看该url是那种操作,进而进行自己的操作。这一种实现起来不需要更改html倒是简单,但是局限性就是要先知道变化操作的url。

    本人知道的就俩种,用哪种方式看具体项目的需求自己取舍吧。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值