• 【coocs 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)
    }
    
    • 1
    • 2
    • 3

    oc 代码:

    - (void) postMessageToJs {
        se::ScriptEngine::getInstance()->evalString("GlobalFunc(\"hello,js\")");
    }
    
    • 1
    • 2
    • 3
    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());
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    关于Python的局部变量和全局变量使用介绍
    Spring源码:编译及阅读源码入门
    技术的“核心引擎”
    学习新思想,争做新青年。(一)
    记录几道整型提升的题目
    WebRTC系列-H.264预估码率计算
    C语言 函数
    RHCE之web服务器搭建
    21级数据结构与算法实验8——排序
    想要精通算法和SQL的成长之路 - 课程表IV
  • 原文地址:https://blog.csdn.net/weixin_41093846/article/details/138188367