Cocos2dxJavascriptJavaBridge.evalString打包运行闪退,怎么实现java调用js

  • Creator 版本:

  • 目标平台:

  • 详细报错信息,包含调用堆栈:

  • 重现方式:

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:

  • 额外线索:

版本:2.08
Android studio
必现
手机:手机几个手机有该现象
代码实现方式


论坛实现方式
请问如何解决

@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();