js与ios交互,js示例

Posted sinceForever

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js与ios交互,js示例相关的知识,希望对你有一定的参考价值。

js与ios交互,js示例

  • js文件:coco3gNativeUser.js
let c3_navtive_user = {};
(function(owner) {
    owner.temp = {};
    //右上角按钮及事件
    owner.__defineSetter__(‘right_button_item‘,function(item){
        this._right_button_item = item;
    });
    owner.__defineGetter__(‘right_button_item‘,function(item){
        return this._right_button_item;
    });
    if (!owner.doActionSync){
        owner.doActionSync = function (){
            alert("客户端尚未实现该方法");
        }
    }
    owner.doActionAnsy = function (action,param,callback){
        var temp = owner.temp;
        if(!param){
            param = {};
        }
        var callbackTag = "callback_" + (new Date()).getTime();
        temp[callbackTag] = callback;
        param.callbackTag = callbackTag;
        var path = "http://coco3g-app/" + action + "?";
        for ( var p in param ){ 
            path += p + "=" + param[p] + "&";
        }
        window.location.href = path;
        return callbackTag; 
    }
    owner.doActionJson = function (action,param,callback){
        var temp = owner.temp;
        var callbackTag = "callback_" + (new Date()).getTime();
        temp[callbackTag] = callback;
        jsondata = {};
        jsondata.callback = callbackTag;
        jsondata.data = param;
        var path = "http://coco3g-app/" + action + "?" + JSON.stringify(jsondata);
        window.location.href = path;
        return callbackTag;
    }
    owner.doActionFunc = function (action,param,callback){
        
        var temp = owner.temp;
        var callbackTag = "callback_" + (new Date()).getTime();
        temp[callbackTag] = callback;
        
        if(!param){
            param = {};
        }
        if("undefined" == typeof CocoObj){
            window.webkit.messageHandlers.XJJsToOC.postMessage({protocol :action, data:param, callback:callbackTag});
        }
        else{
            var paramstring = JSON.stringify({protocol :action, data:param, callback:callbackTag});
            javascript:CocoObj.XJJsToOC(paramstring);
        }
    }
    owner.callback = function (callbackTag,result){
        

        var callbackFun = owner.temp[callbackTag];
        // console.log("callback", callbackFun)
        if (callbackFun){
            // console.log("result1",result)
            callbackFun(result);
        }
        // delete owner.temp[callbackTag];
    }
})(c3_navtive_user);
export default { c3_navtive_user }
  • 与ios交互自定义方法:index.js文件
import jsTooc from "../commonJS/coco3gNativeUser.js";
window.jsTooc = jsTooc; //关键代码,设置jsTooc为全局变量,外部可访问,这样才能和ios交互

export const get = (url, protocol = {}, competitionCd) => {
  return new Promise(resolve => {
    // params.url = "";
    // params.callBack = "";
    let param = {};
    param.url = url;
    param.protocol = protocol
    param.competitionCd = competitionCd
    jsTooc.c3_navtive_user.doActionFunc(‘MPJSHttpServiceWithUrl:andCallBack:‘, param, function(data){
      resolve(data);
    });
  });
};
  • 文件中使用

1 、触发事件后由ios处理逻辑,

editCustomerAction: function() {
  // console.log("this.customerInformObj", this.customerInformObj)
  let protocol = "editCustomerAction:";
  let parameter = {
  customerInformObj: this.customerInformObj //传递给ios的参数,
  };
  jsTooc.c3_navtive_user.doActionFunc(protocol, parameter, function(
  data
  ) {});
},

2、 触发事件后由ios给出窗口,显示h5写的静态页面

popUpViewAction (){
  let protocol = "XJPopUpViewAction:";
  let parameter = {
    url: "exampleUrl",//写h5静态页面的路径,vue打包后点击dist文件中的index.html(此路径为根目录),在index.html后加该h5静态页面的相对路径,这俩组成的新路径为完整的该h5页面完整路径,例如https://p.tohours.com/bluedeer-h5/2019/20191017_mp3ipad/customer-detail/dist/index.html#/customerAnalysisRule/VIPCustomerRule,
    title: "关于VIP客户",//ios需要的参数
    width: "960",//ios需要的参数
    height: "710"//ios需要的参数
  };
  jsTooc.c3_navtive_user.doActionFunc(protocol, parameter, function(
    data
  ) {});
},

以上是关于js与ios交互,js示例的主要内容,如果未能解决你的问题,请参考以下文章

iOS JS与原生交互(全集)

cordova与ios native code交互的原理

iOS与JS交互实战篇(ObjC版)

webapp js与安卓,ios怎么交互

Node.js插件编写-插件代码通过Emit与js代码进行交互

WKWebView与js交互中产生的内存泄漏