我有一个使用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.log
或console.err
某事,我会在XCode中获得输出。问题是我没有得到JavaScript抛出的错误(例如SyntaxErrors,TypeErrors或类似错误)。这些错误仍会显示在Safari检查器中,但不会显示在XCode中。
有任何方法可以达到这个目的吗?
答案 0 :(得分:2)
嗯,尝试检查webViewContext.exception
属性,也许这样可行。
另外,请确保捕获窗口对象中的所有错误。像:
[self.webViewContext evaluateScript:@"window.onerror = function(msg) { console.err(msg)}"]
之后,所有错误都应转发到您的console.err处理程序