Как выполнить JavaScript с помощью JavaScriptCore Framework? - PullRequest
1 голос
/ 10 января 2012

Я реализовал следующий код для выполнения файла JavaScript Jasmine Test Framework.

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 framework DOM и другие функциональные возможности HTML ??

1 Ответ

2 голосов
/ 13 января 2012

Что касается вашего второго вопроса, JavaScriptCore не поддерживает DOM и другие вещи, связанные с HTML.Это минимальный движок, который реализует спецификацию ECMA 262 (?).Поддержка DOM реализована в WebCore, который входит в состав WebKit.

Пойдите с PhantomJS, если вы хотите выполнять безголовые тесты JavaScript / DOM

...