diff --git a/src/bridges/utils.ts b/src/bridges/utils.ts index 65363d7..789128c 100644 --- a/src/bridges/utils.ts +++ b/src/bridges/utils.ts @@ -62,6 +62,13 @@ const utilsBridge = { }) }, + addWebviewErrorListener: (callback: (reason: string) => any) => { + ipcRenderer.removeAllListeners("webview-error") + ipcRenderer.on("webview-error", (_, reason) => { + callback(reason) + }) + }, + writeClipboard: (text: string) => { ipcRenderer.invoke("write-clipboard", text) }, diff --git a/src/components/article.tsx b/src/components/article.tsx index 815a2f5..aa610ff 100644 --- a/src/components/article.tsx +++ b/src/components/article.tsx @@ -27,6 +27,7 @@ type ArticleState = { loadWebpage: boolean loaded: boolean error: boolean + errorDescription: string } class Article extends React.Component { @@ -39,9 +40,11 @@ class Article extends React.Component { loadWebpage: this.props.source.openTarget === SourceOpenTarget.Webpage, loaded: false, error: false, + errorDescription: "", } window.utils.addWebviewContextListener(this.contextMenuHandler) window.utils.addWebviewKeydownListener(this.keyDownHandler) + window.utils.addWebviewErrorListener(this.webviewError) } getFontSize = () => { @@ -132,8 +135,8 @@ class Article extends React.Component { webviewLoaded = () => { this.setState({loaded: true}) } - webviewError = () => { - this.setState({error: true}) + webviewError = (reason: string) => { + this.setState({error: true, errorDescription: reason}) } webviewReload = () => { if (this.webview) { @@ -149,7 +152,6 @@ class Article extends React.Component { webview.focus() this.setState({loaded: false, error: false}) webview.addEventListener("did-stop-loading", this.webviewLoaded) - webview.addEventListener("did-fail-load", this.webviewError) let card = document.querySelector(`#refocus div[data-iid="${this.props.item._id}"]`) as HTMLElement // @ts-ignore if (card) card.scrollIntoViewIfNeeded() @@ -247,6 +249,7 @@ class Article extends React.Component { {intl.get("article.error")} {intl.get("article.reload")} + {this.state.errorDescription} )} diff --git a/src/main/utils.ts b/src/main/utils.ts index b574497..c3ae5c9 100644 --- a/src/main/utils.ts +++ b/src/main/utils.ts @@ -82,6 +82,11 @@ export function setUtilsListeners(manager: WindowManager) { app.on("web-contents-created", (_, contents) => { if (contents.getType() === "webview") { + contents.on("did-fail-load", (event, code, desc, validated, isMainFrame) => { + if (isMainFrame && manager.hasWindow()) { + manager.mainWindow.webContents.send("webview-error", desc) + } + }) contents.on("context-menu", (_, params) => { if (params.selectionText && manager.hasWindow()) { manager.mainWindow.webContents.send("webview-context-menu", [params.x, params.y], params.selectionText)