zoukankan      html  css  js  c++  java
  • 网页H5与原生APP之间的通讯

    原生APP中嵌套H5网页,并且两者之间需要数据相互传递,以下为实现代码:

            // 1.1 获取浏览器设备信息
    
    
            function getBrowser() {
    
                var userAgent = navigator.userAgent;
                var version = navigator.appVersion;
                var language = (navigator.browserLanguage || navigator.language).toLowerCase();
    
                // 浏览器信息
                var browser = {
                    trident: userAgent.indexOf("Trident") > -1,
                    presto: userAgent.indexOf("Presto") > -1,
                    webKit: userAgent.indexOf("AppleWebKit") > -1,
                    gecko: userAgent.indexOf("Gecko") > -1 && userAgent.indexOf("KHTML") == -1,
                    mobile: !!userAgent.match(/AppleWebKit.*Mobile.*/),
                    ios: !!userAgent.match(/(i[^;]+;( U;)? CPU.+Mac OS X/),
                    android: userAgent.indexOf("Android") > -1 || userAgent.indexOf("Linux") > -1,
                    iPhone: userAgent.indexOf("iPhone") > -1,
                    iPad: userAgent.indexOf("iPad") > -1,
                    webApp: userAgent.indexOf("Safari") == -1,
                    language: language,
                    version: version
                };
    
                return browser;
            };
            var browser = getBrowser();
    
    
            // 1.2 注册WebViewJavascriptBridge
    
    
            function bridgeApp() {
                //注册事件监听,初始化
                function setupWebViewJavascriptBridge(callback) {
                    if (window.WebViewJavascriptBridge) {
                        callback(WebViewJavascriptBridge);
                    } else {
                        document.addEventListener(
                            "WebViewJavascriptBridgeReady",
                            function () {
                                callback(WebViewJavascriptBridge);
                            },
                            false
                        );
                    }
                };
                //回调函数,接收java发送来的数据
                setupWebViewJavascriptBridge(function (bridge) {
                    connectWebViewJavascriptBridge(function (bridge) {
    
                        // 接收APP传过来的数据
                        // 注册一个方法(方法名是“registerJSmethod”),客户端进行调用(方法名也是“registerJSmethod”),responseCallback是回调函数
                        bridge.registerHandler('registerJSmethod', function (data, responseCallback) {
                            console.log("registerJSmethod:", data)
                            responseCallback(data)
                        });
    
                        // 向原生APP传递的数据
                        //客户端已经注册好一个名为“registerOCmethod”的方法,H5直接进行调用(方法名也为“registerOCmethod”)就行,调用的时候可以传客户端需要的参数
                        bridge.callHandler('registerOCmethod', { 'key': 'value' }, function responseCallback(responseData) {
                            console.log("registerOCmethod:", responseData)
                        });
                    })
                });
            };
            bridgeApp();
    
    
            // 1.3 向移动APP传递数据
    
            function sendMsg(data) {
    
                if (browser.android) {// android类型
                    if (!window.WebViewJavascriptBridge || !window.WebViewJavascriptBridge.send) {
                        return;
                    }
                    window.WebViewJavascriptBridge.send(JSON.stringify(data));
                } else if (browser.ios) {// ios类型
                    var iframe = document.getElementById('iframe');
                    var url = "myapp:" + JSON.stringify(data);
                    if (!iframe) {
                        iframe = document.createElement("iframe");
                        iframe.src = url;
                        iframe.setAttribute('id', 'iframe');
                        iframe.style.display = 'none';
                        document.body.appendChild(iframe);
                    } else {
                        iframe.src = url;
                    };
                };
            };
      
  • 相关阅读:
    武汉招项目经理,高级软件工程师,客户端程序员,网页制作,2D美工[代发]
    学习WPF: 创建数据绑定目录树
    How do you translage CS2008 hardcode strings quickly?
    Windows Media Services 流媒体服务器架设教程 .
    流媒体服务器搭建实例——可实现录音,录像功能
    (转)A General Fast Method Invoker
    iphone property(转)
    C# 运算法 “??” “:: ” “int?”
    Crosby质量箴言(转)
    iphone程序的生命周期(执行过程) (转)
  • 原文地址:https://www.cnblogs.com/lemen/p/13156935.html
Copyright © 2011-2022 走看看