{"record":{"id":"4da478deac277d47","repo":"wavetermdev/waveterm","slug":"3-suppressed-err-aborted","errorCode":"-3 suppressed (ERR_ABORTED)","errorMessage":"Failed to load ${e.validatedURL}: ${e.errorDescription}","messagePattern":"Failed to load (.+?): (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"frontend/app/view/webview/webview.tsx","lineNumber":1046,"sourceCode":"        };\n        const newWindowHandler = (e: any) => {\n            e.preventDefault();\n            const newUrl = e.detail.url;\n            fireAndForget(() => openLink(newUrl, true));\n        };\n        const startLoadingHandler = () => {\n            model.setRefreshIcon(\"xmark-large\");\n            model.setIsLoading(true);\n            webview.style.backgroundColor = \"transparent\";\n        };\n        const stopLoadingHandler = () => {\n            model.setRefreshIcon(\"rotate-right\");\n            model.setIsLoading(false);\n            setBgColor();\n        };\n        const failLoadHandler = (e: any) => {\n            if (e.errorCode === -3) {\n                console.warn(\"Suppressed ERR_ABORTED error\", e);\n            } else {\n                const errorMessage = `Failed to load ${e.validatedURL}: ${e.errorDescription}`;\n                console.error(errorMessage);\n                setErrorText(errorMessage);\n                if (onFailLoad) {\n                    const curUrl = model.webviewRef.current.getURL();\n                    onFailLoad(curUrl);\n                }\n            }\n        };\n        const webviewFocus = () => {\n            env.electron.setWebviewFocus(webview.getWebContentsId());\n            model.nodeModel.focusNode();\n        };\n        const webviewBlur = () => {\n            env.electron.setWebviewFocus(null);\n        };\n        const handleDomReady = () => {","sourceCodeStart":1028,"sourceCodeEnd":1064,"githubUrl":"https://github.com/wavetermdev/waveterm/blob/a4447c1563b2df285ab89e76c82f91e1a1a49c1e/frontend/app/view/webview/webview.tsx#L1028-L1064","documentation":"When the Electron webview fails to load a URL, failLoadHandler builds 'Failed to load <url>: <errorDescription>' and surfaces it in the block UI. Chromium abort code -3 (ERR_ABORTED) is deliberately suppressed to a console warning because it usually fires on intentional navigations/reloads, not real failures.","triggerScenarios":"The webview's did-fail-load event fires with errorCode !== -3: DNS failure, connection refused, TLS error, or a load aborted by the app itself (errorCode -3, logged only).","commonSituations":"Loading a URL while offline; a server that is down or rejecting connections; an invalid/self-signed certificate; a user-triggered navigation cancelling an in-flight load (suppressed -3 case).","solutions":["Ignore -3 (ERR_ABORTED) occurrences; they are expected during navigation/reload and already suppressed","For real failures, check the errorDescription (e.g. ERR_NAME_NOT_RESOLVED, ERR_CONNECTION_REFUSED) and fix network/DNS/proxy","Verify the URL is reachable (curl it) and that certificates are valid","Use the onFailLoad callback path (getURL, retry/back navigation) to recover the block"],"exampleFix":"// before\nconst errorMessage = `Failed to load ${e.validatedURL}: ${e.errorDescription}`;\nconsole.error(errorMessage);\n// after\nconst errorMessage = `Failed to load ${e.validatedURL}: ${e.errorDescription}`;\nconsole.error(errorMessage);\nsetErrorText(errorMessage);\nif (onFailLoad) onFailLoad(e.validatedURL, e.errorDescription); // offer retry button","handlingStrategy":"try-catch","validationCode":"// before loading, check reachability where possible\nconst ok = await fetch(url, { method: 'HEAD' }).then(r => r.ok).catch(() => false);\nif (!ok) console.warn('URL may be unreachable:', url);","typeGuard":"function isRealLoadFailure(e: { errorCode: number }): boolean {\n    return e.errorCode !== -3; // -3 = ERR_ABORTED, expected on navigation/reload\n}","tryCatchPattern":"const failLoadHandler = (e: any) => {\n    if (e.errorCode === -3) {\n        console.warn('Suppressed ERR_ABORTED error', e);\n        return;\n    }\n    const errorMessage = `Failed to load ${e.validatedURL}: ${e.errorDescription}`;\n    console.error(errorMessage);\n    setErrorText(errorMessage);\n    onFailLoad?.();\n};","preventionTips":["Always branch on errorCode === -3 first and ignore it","Map common errorDescriptions (ERR_NAME_NOT_RESOLVED, ERR_CONNECTION_REFUSED, ERR_CERT_*) to user guidance","Provide a retry/reload affordance via onFailLoad","Validate URLs (scheme, DNS) before passing them to the webview"],"tags":["webview","electron","network","load-failed"],"backgroundTag":"webview-did-fail-load","analyzedSha":"a4447c1563b2df285ab89e76c82f91e1a1a49c1e","analyzedAt":"2026-09-01T15:26:23.972Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}