diff --git a/lib/browser/api/web-contents.js b/lib/browser/api/web-contents.js index 4e3ec332ae..7485a71958 100644 --- a/lib/browser/api/web-contents.js +++ b/lib/browser/api/web-contents.js @@ -112,6 +112,16 @@ const webFrameMethods = [ ] const webFrameMethodsWithResult = [] +const errorConstructors = { + Error, + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError +} + const asyncWebFrameMethods = function (requestId, method, callback, ...args) { return new Promise((resolve, reject) => { this.send('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', requestId, method, args) @@ -120,7 +130,18 @@ const asyncWebFrameMethods = function (requestId, method, callback, ...args) { if (typeof callback === 'function') callback(result) resolve(result) } else { - reject(error) + if (error && error.__ELECTRON_SERIALIZED_ERROR__) { + let rehydratedError = error + + if (errorConstructors[error.name]) { + rehydratedError = new errorConstructors[error.name](error.message) + rehydratedError.stack = error.stack + } + + reject(rehydratedError); + } else { + reject(error) + } } }) })