diff --git a/Frameworks/HTMLOutput/src/OakHTMLOutputView.mm b/Frameworks/HTMLOutput/src/OakHTMLOutputView.mm index edfdc16f..a4c1a771 100644 --- a/Frameworks/HTMLOutput/src/OakHTMLOutputView.mm +++ b/Frameworks/HTMLOutput/src/OakHTMLOutputView.mm @@ -85,12 +85,14 @@ extern NSString* const kCommandRunnerURLScheme; // from HTMLOutput.h { self.runningCommand = NO; self.autoScrollHelper = nil; + [super webView:sender didFailProvisionalLoadWithError:error forFrame:frame]; } - (void)webView:(WebView*)sender didFailLoadWithError:(NSError*)error forFrame:(WebFrame*)frame { self.runningCommand = NO; self.autoScrollHelper = nil; + [super webView:sender didFailLoadWithError:error forFrame:frame]; } // ========================================= diff --git a/Frameworks/HTMLOutput/src/browser/HOBrowserView.mm b/Frameworks/HTMLOutput/src/browser/HOBrowserView.mm index c548a9a0..a2364970 100644 --- a/Frameworks/HTMLOutput/src/browser/HOBrowserView.mm +++ b/Frameworks/HTMLOutput/src/browser/HOBrowserView.mm @@ -4,6 +4,18 @@ #import #import +static NSString* EscapeHTML (NSString* str) +{ + return [[[str stringByReplacingOccurrencesOfString:@"&" withString:@"&"] stringByReplacingOccurrencesOfString:@"<" withString:@"<"] stringByReplacingOccurrencesOfString:@"\"" withString:@"""]; +} + +static void ShowLoadErrorForURL (WebFrame* frame, NSURL* url, NSError* error) +{ + NSString* options = [[url scheme] isEqualToString:@"file"] ? @" -R" : @""; + NSString* errorMsg = [NSString stringWithFormat:@"Load Error

Load Error

WebKit reported %@ while loading %@.

", EscapeHTML([error localizedDescription]), options, EscapeHTML([url absoluteString]), EscapeHTML([url absoluteString])]; + [frame loadHTMLString:errorMsg baseURL:[NSURL fileURLWithPath:NSTemporaryDirectory()]]; +} + @interface HOBrowserView () @property (nonatomic, readwrite) WebView* webView; @property (nonatomic, readwrite) HOStatusBar* statusBar; @@ -143,6 +155,18 @@ [self setUpdatesProgress:YES]; } +- (void)webView:(WebView*)sender didFailProvisionalLoadWithError:(NSError*)error forFrame:(WebFrame*)frame +{ + ShowLoadErrorForURL(frame, [[[frame provisionalDataSource] request] URL], error); + [self webView:sender didFinishLoadForFrame:frame]; +} + +- (void)webView:(WebView*)sender didFailLoadWithError:(NSError*)error forFrame:(WebFrame*)frame +{ + ShowLoadErrorForURL(frame, [[[frame provisionalDataSource] request] URL], error); + [self webView:sender didFinishLoadForFrame:frame]; +} + - (void)webView:(WebView*)sender didFinishLoadForFrame:(WebFrame*)frame { _statusBar.canGoBack = _webView.canGoBack;