iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了JavaScriptCore console.log大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我整理了一个非常简单的程序,它使用JavaScriptCore来评估JS: #import <CoreFoundation/CoreFoundation.h> #import <JavaScriptCore/JavaScriptCore.h> int main(int argc, const char * argv[]) { JSGlobalContextRef ctx = JSGlob
我整理了一个非常简单的程序,它使用JavaScriptCore来评估JS:

#import <CoreFoundation/CoreFoundation.h>
#import <JavaScriptCore/JavaScriptCore.h>

int main(int argc,const char * argv[])
{
    JSGlobalContextRef ctx = JSGlobalContextCreate(null);

    FILE *f = fopen(argv[1],"r");
    char * buffer = malloc(10000000);
    fread(buffer,1,10000000,f);

    CFStringRef strs = CFStringCreateWithCString(NULL,buffer,kcfStringEncodingASCII);

    JSStringRef jsstr = JSStringCreateWithCFString(strs);
    JSValueRef result = JSEvaluateScript(ctx,jsstr,NULL,null);

    double res  = JSValueTonumber(ctx,result,null);
    JSGlobalContextRelease(ctX);

    printf("%lf\n",res);
    return 0;
}

这里的想法是最后一个值应该是一个数字,并打印该值.这适用于有效的JavaScript代码,例如

var square = function(X) { return x*x; }; square(4)

但是,如果代码尝试执行console.log,则程序会出现错误. JSC中是否有可用的日志功能,还是我必须自己滚动?

解决方法

如果使用Mac或IOS的JavaScriptCore框架,则必须提供自己的控制台日志.

这里有一些代码我有用(对不起,根据你上面的代码,它是Objective-C而不是标准C)

JSContext *javascriptContext  = [[JSContext alloc] init];
javascriptContext[@"consoleLog"] = ^(NSString *messagE) {
    NSLog(@"Javascript log: %@",messagE);
};

然后你从Javascript使用它:

consoleLog("My debug message");

请注意,我已经尝试定义了一个vararg版本(记录了多个参数),但我无法在框架api中正常工作.

请注意,此解决方案使用随新的Objective-C API引入的功能,用于与IOS 7同时引入的JavaScriptCore.framework.如果您正在寻找Objective-C和Javascript之间这个良好集成的桥梁的介绍,请查看2013年WWDC在Apple开发者网络上推出的“将JavaScript集成到本机应用程序”会话:https://developer.apple.com/videos/wwdc/2013/?id=615

更新回答:

对于那些想要在不进行重构的情况下最大化javascript代码重用的人,我设法得到一个版本工作,声明了console.log()形式的日志:

JSContext *javascriptContext  = [[JSContext alloc] init];
[javascriptContext evaluateScript:@"var console = {}"];
javascriptContext[@"console"][@"log"] = ^(NSString *messagE) {
    NSLog(@"Javascript log: %@",messagE);
};

然后你从Javascript使用它:

console.log("My debug message");

大佬总结

以上是大佬教程为你收集整理的JavaScriptCore console.log全部内容,希望文章能够帮你解决JavaScriptCore console.log所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。