-
Creator 版本:
-
目标平台:
-
详细报错信息,包含调用堆栈:
-
重现方式:
-
之前哪个版本是正常的 :
-
手机型号 :
-
手机浏览器 :
-
编辑器操作系统 :
-
编辑器之前是否有其它报错 :
-
出现概率:
-
额外线索:
Creator 版本:
目标平台:
详细报错信息,包含调用堆栈:
重现方式:
之前哪个版本是正常的 :
手机型号 :
手机浏览器 :
编辑器操作系统 :
编辑器之前是否有其它报错 :
出现概率:
额外线索:
@panda请教你们是怎么java调用js的
一般都是通过全局变量来进行回调,把对应变量挂在window上,然后再通过window来进行回调。
举个简单的例子:
脚本
let sayHello = () => {
console.log("Hello!Hello!Hi!");
};
window.sayHello = sayHello;
java
Cocos2dxJavascriptJavaBridge.evalString("window.sayHello();");
谢谢,你的方式可以实现,我已经实现了,还可以通过当前界面的节点来找到对应的方法,我大佬有洁癖,不允许我用Window这种方式来用,以下方式也可以实现//String jsCallStr = “var node = cc.find(‘Canvas’); node.getComponent(‘SceneLoading’).test();”;
//Cocos2dxJavascriptJavaBridge.evalString(jsCallStr);
老哥 这么写 他说我最后一个不是个方法 写全局后 回调里面获取不到当前页的节点
emmm…全局你按照上面老哥的方法来搞,我哪个test方法反正在js里面是有输出来过的
一般的话都会建一个单例管理类脚本来管理。而且我认为原则上不应该在原生调用js时写具体的业务逻辑,而是应该传递约定结构的消息数据,交由管理类脚本统一处理。
脚本:
window.adapter = AdapterManager.getInstance();
java
String data = new Gson().toJson(xxx);
Cocos2dxJavascriptJavaBridge.evalString(String.format(“window.adapter.receive(%s);”, data));
同样的,从脚本到原生也应该通过对应管理类脚本来统一管理,而不是随便在某个地方直接去调用原生里的某个方法。
let adapter = AdapterManager.getInstance();
let country = adapter.getCountry();
let language = adapter.getLanguage();
let batteryLevel = adapter.getBatteryLevel();