jsBridge与安卓,ios

var uniqueId = 0;

;(function($){
	var scWid = document.documentElement.offsetWidth||document.body.offsetWidth;
	var initScWid = 375;
	var initFontSize = 20;
	$('html').css({
		'fontSize': parseInt((scWid * initFontSize) / initScWid) + 'px'
	});
})(Zepto);

function jsBridge(funcName,data,callback){
	if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) { //ios
		setupWebViewJavascriptBridge(function (bridge) {
			bridge.callHandler(funcName, data,callback );
		});
	} else if (navigator.userAgent.match(/android/i)) {
		connectWebViewJavascriptBridge(function(bridge) {
			if(uniqueId==1){
                bridge.init(function(message, responseCallback) {responseCallback(data)});
            }
			if(window.WebViewJavascriptBridge){
				window.WebViewJavascriptBridge.callHandler(
	               funcName
	               , data,
				   callback
	            );
			}else{
				bridge.callHandler(funcName, data, callback);
			}
			bridge.registerHandler("openPage", function(data, responseCallback) {
                console.log("from android",data);
                var responseData = "我接受到了安卓的调用";
           	});
       });
	} else {
		console.log('this is an error ouput');
	}
}

function setupWebViewJavascriptBridge(callback) {

    if (window.WebViewJavascriptBridge) {
        return callback(WebViewJavascriptBridge);
    }
    if (window.WVJBCallbacks) {
        return window.WVJBCallbacks.push(callback);
    }
    window.WVJBCallbacks = [callback];
    var WVJBIframe = document.createElement('iframe');
    WVJBIframe.style.display = 'none';
    WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
    document.documentElement.appendChild(WVJBIframe);
    setTimeout(function () {
        document.documentElement.removeChild(WVJBIframe)
    }, 100)
}

function connectWebViewJavascriptBridge(callback) {
    uniqueId++;
    if (window.WebViewJavascriptBridge) {
        callback(WebViewJavascriptBridge)
    } else {
        document.addEventListener(
        'WebViewJavascriptBridgeReady'
        , function () {
            callback(WebViewJavascriptBridge)
        }, false);
    }
}


代码如上,ios里面直接使用setupWebViewJavascriptBridge方法就可以,但是在安卓上,需要调用一次init()方法进行初始化,且只能调用一次,重复调用会抛异常:WebViewJavascriptBridge.init() called twice。所以定一了一个全局变量进行处理。

调用方式:

var data = {
				"userName":realName,
				"userIDcard":idCard,
				"securityCode":code,
			}
			jsBridge("webSubmit",data,function(responseData){
				var responseData = JSON.parse(responseData);
				console.log(responseData);
				toast(responseData.msg);
			});


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
是的,为了实现在Web页面中与iOS和Android原生应用程序之间的交互,可以使用JSBridgeJSBridge是一个桥接工具,可以将JavaScript与原生应用程序之间的通信连接起来。 在iOS中,可以使用JavaScriptCore框架和WKWebView来实现JSBridge。在Android中,可以使用WebView和JavaScriptInterface来实现JSBridge。 具体来说,需要在原生应用程序中创建一个JavaScriptInterface类,该类可以实现JavaScript与原生代码之间的通信。然后在Web页面中,可以通过JavaScript调用原生应用程序中的方法。 例如,在iOS中,可以使用以下代码创建一个JavaScriptInterface类: ``` @objc class JSInterface: NSObject { weak var webView: WKWebView? init(webView: WKWebView) { self.webView = webView super.init() } @objc func showToast(_ message: String) { let alertController = UIAlertController(title: "Toast", message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "OK", style: .default, handler: nil) alertController.addAction(okAction) self.webView?.viewController?.present(alertController, animated: true, completion: nil) } } ``` 然后在Web页面中,可以通过以下代码调用原生应用程序中的showToast方法: ``` window.webkit.messageHandlers.jsInterface.postMessage({action: 'showToast', message: 'Hello world!'}); ``` 在Android中,可以使用以下代码创建一个JavaScriptInterface类: ``` public class JSInterface { private Context context; public JSInterface(Context context) { this.context = context; } @JavascriptInterface public void showToast(String message) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } } ``` 然后在Web页面中,可以通过以下代码调用原生应用程序中的showToast方法: ``` window.jsInterface.showToast('Hello world!'); ``` 通过这种方式,可以实现JavaScriptiOS和Android原生应用程序之间的交互。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值