【cocos creator】Objective-C 执行 JS 代码,传递json数据

官网教程

如何在 iOS 平台上使用 Javascript 直接调用 Objective-C 方法

报错

1. se报错

需要引入SeApi.h
#import "cocos/scripting/js-bindings/jswrapper/SeApi.h"

2. 执行脚本出错

ScriptEngine::evalString script(no filename),failed!ERROR:SyntaxError:Unexpected EOF,location:(no filename):1:
STACK:
callStaticMethod@[native code]

se::ScriptEngine::getInstance()->evalString(script.c_str());
在ios这边,script执行的function需要挂在window上面。
js 代码:

window.GlobalFunc = function(paramStr) {
	console.log("GlobalFunc ", paramStr)
}

oc 代码:

- (void) postMessageToJs {
    se::ScriptEngine::getInstance()->evalString("GlobalFunc(\"hello,js\")");
}
3. 传递json数据

ios 通过 evalString 传递json数据,如果直接json串传递会报错,因为会有双引号问题。为了解决这个问题,可以再加一层编码,比如base64。

- (void) postMessageToJs {
	NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    [dict setObject:[NSNumber numberWithInt:1001] forKey:@"cmdid"];
    [dict setObject@"hello,js" forKey:@"content"];
    NSError *error;
    NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
    if (data == nil) {
        NSLog(@"JSON serialization error: %@", error); // 打印错误信息
        return; // 在出现错误时退出方法
    }
    // 将 JSON 数据进行 Base64 编码
    NSString *encodedStr = [data base64EncodedStringWithOptions:0];
    NSString *execStr = [NSString stringWithFormat:@"GlobalFunc(\"%@\")",encodedStr];
    std::string jsCallStr = [execStr UTF8String];
    NSLog(@"postMessageToJs %s", jsCallStr.c_str());
    se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值