如何使用JavaScriptCore将错误记录到XCode?

时间:2015-05-11 18:51:37

标签: javascript ios xcode logging javascriptcore

我有一个使用JavaScriptCore在webview和Objective C之间进行通信的项目。这一切都运行良好,除了我似乎无法将运行时错误记录到XCode控制台。

我有以下内容:

- (void)createWebViewContext {
    //Find the context
    self.webViewContext = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    //Register JS error handler
    self.webViewContext.exceptionHandler = ^(JSContext *c, JSValue *e) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"JAVASCRIPT ERROR: %@. Stack: %@", e, [e valueForProperty:@"stack"]);
        });
    };

    //Attach logger
    id logger = ^(NSString *logMessage) {
        NSLog(@"%@", logMessage);
    };
    self.webViewContext[@"console"][@"log"]   = logger;
    self.webViewContext[@"console"][@"info"]  = logger;
    self.webViewContext[@"console"][@"error"] = logger;
    self.webViewContext[@"console"][@"err"] = logger;
    self.webViewContext[@"console"][@"warn"]  = logger;
}

此代码似乎有效 - 如果我console.logconsole.err某事,我会在XCode中获得输出。问题是我没有得到JavaScript抛出的错误(例如SyntaxErrors,TypeErrors或类似错误)。这些错误仍会显示在Safari检查器中,但不会显示在XCode中。

有任何方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:2)

嗯,尝试检查webViewContext.exception属性,也许这样可行。

另外,请确保捕获窗口对象中的所有错误。像:

[self.webViewContext evaluateScript:@"window.onerror = function(msg) { console.err(msg)}"]

之后,所有错误都应转发到您的console.err处理程序