IOS向js class类里传值

场景:

使用cocos creator写的web游戏需要接入app。

尝试与困难:

1.百度的IOS与JS互相调用和传值web端都是用js原生写的,而cocos creator的代码则是使用的class类。
2.研究以后发现IOS调用js函数以传值是只能调用定义在window对象上的函数,然后就尝试在class外面定义函数给IOS调用,发现并行不通,这样定义的函数在本地环境运行时时定义在window上的,但是在线上运行时window对象里却没有,导致OC掉用不了。
3.IOS传值时如果是数字类型不需加引号,而是字符串类型时需要加引号。(联调很麻烦,所以这个问题找了半天。。)
4.接上2,定义函数是,需要强制在window上定义,这样在线上环境时,window对象里才找得到。

下面是代码:

JS:

//初始化值
let iOSdata = "";

//给OC调用的函数,需要用window.来强行定义在window上
window.getInfo = function (data) {
    iOSdata = data;
};

//cocos creator的类
cc.Class({
    extends: cc.Component,

    properties: {
    },


    // onLoad () {},

    start () {

    },

    // update (dt) {},
    
    doSomething:function(){
      //获取的数据在类里使用
      console.log(iOSdata)
    }
});

IOS:

\- (void)OCCallJS:(NSString\*)json{  
    // oc调用js代码  
    /\*\*  
     对应js代码  
     function getAppData(str) {  
     asyncAlert(str);  
     document.getElementById("returnValue").value = str;  
     }  
     \*/  
     //getInfo()是JS定义的方法
     //就是这里!!getInfo()里的参数类型需注意!!这里联调了很久,虽然不是一个很大的问题。
    NSString \*jsStr = \[NSString stringWithFormat:@"getInfo('%@')",json\];  
    \[self.webView evaluateJavaScript:jsStr completionHandler:^(id \_Nullable data, NSError \* \_Nullable error) {  
        if (error) {  
            DLog(@"错误:%@", error);  
        }else if(\[data isKindOfClass:\[NSDictionary class\]\]){  
              
        }  
    }\];  
}

同理,如果使用其他前端框架,只需要注意吧给IOS调用的函数强制定义在window对象就行,代码很简单,自记录,也希望对你有帮助。
以上。


Dezio
4 声望1 粉丝

web前端攻城狮