zoukankan      html  css  js  c++  java
  • cocos客户端调用原生方法

    在现实的开发过程中,会遇到一些,在APP里面,集成游戏的功能。

    APP开发,可能是安卓,也可能是IOS,需要把原生和客户端的方法,

    能够相互调用,写一个方法,供开发者参考:

    jsbridge.js方法:

     1 function setupWebViewJavascriptBridge(callback) {
     2     if (/android/.test(navigator.userAgent.toLowerCase())) {
     3         if (window.WebViewJavascriptBridge) {
     4             callback(window.WebViewJavascriptBridge);
     5         } else {
     6             document.addEventListener(
     7                 'WebViewJavascriptBridgeReady',
     8                 function() {
     9                     callback(window.WebViewJavascriptBridge);
    10                 },
    11                 false
    12             );
    13         }
    14     } else if (/ios|iphone|ipad|ipod/.test(navigator.userAgent.toLowerCase())) {
    15         if (window.WebViewJavascriptBridge) {
    16             return callback(window.WebViewJavascriptBridge);
    17         }
    18         if (window.WVJBCallbacks) {
    19             return window.WVJBCallbacks.push(callback);
    20         }
    21         window.WVJBCallbacks = [callback];
    22         var WVJBIframe = document.createElement('iframe');
    23         WVJBIframe.style.display = 'none';
    24         WVJBIframe.src = 'https://__bridge_loaded__';
    25         document.documentElement.appendChild(WVJBIframe);
    26         setTimeout(function() {
    27             document.documentElement.removeChild(WVJBIframe);
    28         }, 100);
    29     }
    30 }
    31 setupWebViewJavascriptBridge(function(bridge) {
    32     if (/android/.test(navigator.userAgent.toLowerCase())) {
    33         bridge.init(function(message, responseCallback) {
    34             // 'JS got a message', message
    35             var data = {
    36                 'Javascript Responds': '测试中文!'
    37             };
    38 
    39             if (responseCallback) {
    40                 // 'JS responding with', data
    41                 responseCallback(data);
    42             }
    43         });
    44     }
    45 });
    46 // 初始化jsbridge
    47 function setbridge(funName, dataJson, callback) {
    48     setupWebViewJavascriptBridge(function(bridge) {
    49         bridge.registerHandler(funName, function(data, responseCallback) {
    50             console.log(' js load data ', data);
    51             // '注册函数,从app拿到的数据', data
    52             callback && callback(data);
    53             //var responseData = dataJson;
    54             // 'js返回给app的数据', responseData
    55             //console.log(responseData);
    56             //responseCallback(responseData);
    57         });
    58     });
    59 }
    60 
    61 function getbridge(funName, dataJson, callback) {
    62     setupWebViewJavascriptBridge(function(bridge) {
    63         bridge.callHandler(funName, dataJson, function(response) {
    64             callback && callback(response);
    65         });
    66     });
    67 }
    68 
    69 export { setbridge, getbridge };

    在需要导入的文件中,直接导入:

    调用方法如下:
     1 // 导入接口方法
     2 import { setbridge, getbridge } from 'jsbridge';
     3 
     4 // 客户端调用原生,方法名称,字符串, 回调函数
     5 getbridge('jsCallPhoneArg', 'token接口', (data) => {
     6       data = JSON.parse(data);      // 一些原生数据可能是json格式,根据实际情况自行调整        
     7 };
     8  
     9 // 原生调用客户端
    10 var self = this;
    11 // 变色接口
    12 setbridge('phoneChangeDDSProgress', '变色接口', (data) => {
    13     ServerData.glory_time = data;     // 原生给客户端传值
    14     self.visibleGreen();   // 客户端方法,在这里如果用this,作用域指向会出问题    
    15 });
    16 
    17 // 也可以从客户端直接传数据给原生 ServerData.data为数据
    18 getbridge('jsCallPhoneGiftDatas', ServerData.data, (data) => {
    19     console.log("给原生端发送数据");
    20 });

    参考文档:https://www.cnblogs.com/zhangycun/p/10775087.html

     
     
  • 相关阅读:
    fatal error: bits/c++config.h: No such file or directory
    linux 下Beyond Compare 安装
    TD 加载界面实现
    JPA 如何实现 insert ignore
    jsonp 未实现跨域的原因?
    Linux 常用命令
    rancher server偶发504问题排查
    docker清理none image
    docker构建权限问题
    docker containers logs clean
  • 原文地址:https://www.cnblogs.com/Hunter-541695/p/14363951.html
Copyright © 2011-2022 走看看