0
我有一個使用JavaScriptCore在webview和objective C之間進行通信的項目。這一切都很好,除了我似乎無法將運行時錯誤記錄到XCode控制檯。如何使用JavaScriptCore將錯誤記錄到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中。
任何方式來實現這一目標?
遺憾的是,似乎並沒有任何工作。如果我觀察異常屬性,那麼該值似乎只會從NSNull變爲另一個NSNull:/ – BlackWolf
哦,另一件事:嘗試首先設置window.onerror處理程序,並將所有內容記錄到控制檯中。就像「[self.webViewContext evaluateScript:@」window.onerror = function(msg){console.err(msg)}「],然後它應該啓動所有錯誤並將其轉發到console.log –
完美,非常感謝你!我一直在尋找一種JavaScript解釋器用來記錄錯誤的方法,但是我從來沒有偶然發現過window.onerror。如果你把它寫成一個答案,我會接受。 – BlackWolf