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对象就行,代码很简单,自记录,也希望对你有帮助。
以上。