javascript - 如何使用 JavaScriptCore 框架执行 JavaScript?

标签 javascript iphone objective-c jasmine javascriptcore

我已经实现了以下代码来执行 Jasmine Test 的 JavaScript 文件框架。

NSMutableArray * fArr = [[NSBundle mainBundle] pathsForResourcesOfType:@"js" inDirectory:@"scripts/JS_TestFramework/lib/jasmine-1.1.0"];
NSMutableString *fullFrameworkScript = nil;
    NSString *script;

    for (int i = fArr.count-1; i >= 0; i--) 
    {
        NSMutableString* filePath = [fArr objectAtIndex:i];

        fullFrameworkScript = [NSMutableString string];

        NSError*    error;

        script = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];

        if(script)
        {
            [fullFrameworkScript appendString:script];
        }
    }
    JSValueRef result;
if(fullFrameworkScript)
    {
        JSStringRef scriptJS = JSStringCreateWithCFString(fullFrameworkScript);

        JSValueRef exception = NULL;

        result = JSEvaluateScript(context, scriptJS, NULL, NULL, 1, &exception);

        if(exception)
        {
            [self logException:exception];
            exception = NULL;
        }

        JSStringRelease(scriptJS);
    }

JSStringRef step1 = JSStringCreateWithCFString(@"jasmine.getEnv().addReporter(new jasmine.TrivialReporter())");

JSValueRef exception = NULL;

    JSObjectRef fn          = JSObjectMakeFunction(context, step1, 0, NULL, JSStringCreateWithCFString(script), NULL, 0, NULL);
    result      = JSObjectCallAsFunction(context, fn, NULL, 0, NULL, &exception);

    if(exception)
    {
        [self logException:exception];
        exception = NULL;
    }

    JSStringRelease(step1);

    [MTPScriptExecutionContext removeAllObjects];

    JSStringRef htmlResult = JSValueToStringCopy(context, result, NULL);

    NSString *htmlData = [NSMakeCollectable(JSStringCopyCFString(kCFAllocatorDefault, htmlResult)) autorelease];

    JSStringRelease(htmlResult);

    return htmlData;

这是我的函数,它返回 HTML 数据...当我执行脚本时,我在异常时遇到以下错误:

Exception = Can't find variable: jasmine

尽管我的脚本在第一行声明了 jasmine 变量。上面的代码还有什么问题????他们还有其他执行 JavaScript 的方式吗??

还有一个问题:JavaScriptCore 框架是否支持 DOM 和 HTML 的其他功能?

最佳答案

对于你的第二个问题,JavaScriptCore 不支持 DOM 和其他 HTML 相关的东西。它是一个实现 ECMA 262(?) 规范的最小引擎。 DOM 支持在作为 WebKit 一部分的 WebCore 中实现。

如果您想进行 headless JavaScript/DOM 测试,请使用 PhantomJS

关于javascript - 如何使用 JavaScriptCore 框架执行 JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8798956/

相关文章:

javascript - 如何获取数组值,其中键(即数字)是下一个最低值?

javascript - 在php中使用foreach循环从两个数组中减去日期

iOS SDK 可以静音或取消来电吗

iphone - 过度释放 CFNetwork 中的数组?

objective-c - 在 Objective-C 中创建 TTF

javascript - 如何将 javascript Date() 转换为 COleDateTime

javascript - PHP 查询整个表格,同时有一个搜索框,无需提交表单即可搜索

iPhone 4 分辨率困难 - @2x 命名技术不适用于按钮图像

ios - 使用 CG/Quartz 像仪表一样填充 UIImage

ios - Dealloc 导致在 Cocos2D 场景之间切换时发生崩溃