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

标签 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 中。

有什么办法可以实现吗?

最佳答案

嗯,尝试检查 webViewContext.exception 属性,也许这会起作用。

此外,请确保捕获窗口对象中的所有错误。喜欢:

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

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

关于javascript - 如何使用 JavaScriptCore 将错误记录到 XCode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30175405/

相关文章:

javascript - 使用 json 数据的 CanvasJs 图表

PHP if else - 正确使用 "else"

ios - 隐藏 ViewController 后实例化按钮不起作用

ios - 按顺序显示编辑的NSString

ios - 在自定义类中呈现 UIDocumentInteractionController 的问题

objective-c - 在单个 iOS View 中概括 UI 元素关系

javascript - 如果 URL 包含使用 JavaScript 的特定端口重定向

ios - 使用 GCD 计算从后台队列加载数据的百分比

ios - 用于手机号码验证的 NSPredicate

javascript - 如何使用 jQuery 在 iPhone Safari 上创建照片 slider ?