如何使用 JavaScriptCore 将错误记录到 XCode?
How to log errors to XCode with 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.log
或 console.err
某些东西,我会在 XCode 中得到输出。问题是我没有收到 JavaScript 抛出的错误(例如 SyntaxErrors、TypeErrors 或类似错误)。此类错误仍会出现在 Safari 检查器中,但不会出现在 XCode.
中
有什么方法可以实现吗?
嗯,尝试检查 webViewContext.exception
属性,也许这会奏效。
此外,请确保捕获 window 对象中的所有错误。喜欢:
[self.webViewContext evaluateScript:@"window.onerror = function(msg) { console.err(msg)}"]
之后,所有错误都应转发给您的 console.err 处理程序
我有一个项目使用 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.
有什么方法可以实现吗?
嗯,尝试检查 webViewContext.exception
属性,也许这会奏效。
此外,请确保捕获 window 对象中的所有错误。喜欢:
[self.webViewContext evaluateScript:@"window.onerror = function(msg) { console.err(msg)}"]
之后,所有错误都应转发给您的 console.err 处理程序