diff --git a/bridge/bindings/jsc/DOM/event_target.cc b/bridge/bindings/jsc/DOM/event_target.cc index fb025e8ea5..e54fa594de 100644 --- a/bridge/bindings/jsc/DOM/event_target.cc +++ b/bridge/bindings/jsc/DOM/event_target.cc @@ -421,8 +421,30 @@ bool EventTargetInstance::internalDispatchEvent(EventInstance *eventInstance) { } // Dispatch event listener white by 'on' prefix property. - if (_propertyEventHandler.count(eventType) > 0 && eventType != "error") { - _dispatchEvent(_propertyEventHandler[eventType]); + if (_propertyEventHandler.count(eventType) > 0) { + if (eventType == "error") { + auto _dispatchErrorEvent = [&eventInstance, this, eventType](JSObjectRef &handler) { + JSValueRef exception = nullptr; + JSValueRef errorObjectValue = getObjectPropertyValue(ctx, eventType, eventInstance->object, &exception); + JSObjectRef errorObject = JSValueToObject(ctx, errorObjectValue, &exception); + JSValueRef messageValue = getObjectPropertyValue(ctx, "message", errorObject, &exception); + JSValueRef sourceURLValue = getObjectPropertyValue(ctx, "sourceURL", errorObject, &exception); + JSValueRef lineValue = getObjectPropertyValue(ctx, "line", errorObject, &exception); + JSValueRef columnValue = getObjectPropertyValue(ctx, "column", errorObject, &exception); + const JSValueRef arguments[] = { + messageValue, + sourceURLValue, + lineValue, + columnValue, + errorObjectValue + }; + JSObjectCallAsFunction(_hostClass->ctx, handler, nullptr, 5, arguments, &exception); + context->handleException(exception); + }; + _dispatchErrorEvent(_propertyEventHandler[eventType]); + } else { + _dispatchEvent(_propertyEventHandler[eventType]); + } } // do not dispatch event when event has been canceled diff --git a/bridge/polyfill/src/index.ts b/bridge/polyfill/src/index.ts index fcfbdbfa3c..27fe102832 100644 --- a/bridge/polyfill/src/index.ts +++ b/bridge/polyfill/src/index.ts @@ -76,10 +76,6 @@ class ErrorEvent extends Event { // Global error handler used by JS Engine // @ts-ignore window.__global_onerror_handler__ = function (error) { - if (window.onerror) { - window.onerror(error.message, error.sourceURL, error.line, error.column, error); - } - // @ts-ignore const event = new ErrorEvent('error',{ error: error,