webviewJavascriptBridge奇葩错误记录

24 篇文章 0 订阅

可能有些读者不知道webviewJavascriptBridge是啥,我先简单说一下。android和ios有时会需要与h5界面交互。如果不使用该框架,h5端需要写两套接口分别针对android和ios,使用该框架可以统一接口。
我借用的第三方版本网址:https://github.com/gzsll/WebViewJavascriptBridge

发现的问题:4.4以下registerHandler失效:
android端源码(其实就是原例子,为了看起来方便):
原因:自己用的时候,因为都是h5调用app,没有用到callHandler,所以删掉,结果4.4以下版本失效,所以此接口必须添加,可以不使用,同时网页端也添加相应设置。

package com.gzsll.webviewjavascriptbridge;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.WebView;
import android.widget.Toast;

import com.gzsll.jsbridge.WVJBWebView;
import com.gzsll.jsbridge.WVJBWebViewClient;

public class MainActivity extends AppCompatActivity {

private static final String TAG = "WebViewJavascriptBridge";


private WVJBWebView webView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    webView = (WVJBWebView) findViewById(R.id.webView);
    webView.loadUrl("file:///android_asset/ExampleApp.html");
    webView.setWebViewClient(new CustomWebViewClient(webView));

    findViewById(R.id.call).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            webView.callHandler("testJavascriptHandler", "{\"greetingFromJava\": \"Hi there, JS!\" }", new WVJBWebView.WVJBResponseCallback() {

                @Override
                public void callback(Object data) {
                    Toast.makeText(MainActivity.this, "testJavascriptHandler responded: " + data, Toast.LENGTH_LONG).show();
                }
            });
        }
    });

    webView.registerHandler("testJavaCallback", new WVJBWebView.WVJBHandler() {

        @Override
        public void request(Object data, WVJBWebView.WVJBResponseCallback callback) {
            Toast.makeText(MainActivity.this, "testJavaCallback called:" + data, Toast.LENGTH_LONG).show();
            callback.callback("Response from testJavaCallback!");
        }
    });
//此段必须
    webView.callHandler("testJavascriptHandler", "{\"foo\":\"before ready\" }", new WVJBWebView.WVJBResponseCallback() {

        @Override
        public void callback(Object data) {
            Toast.makeText(MainActivity.this, "Java call testJavascriptHandler got response! :" + data, Toast.LENGTH_LONG).show();
        }
    });

}

public class CustomWebViewClient extends WVJBWebViewClient {

    public CustomWebViewClient(WVJBWebView webView) {
        super(webView);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //  do your work here
        // ...
        return super.shouldOverrideUrlLoading(view, url);
    }
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值