diff --git a/packages/zone-js/dist/nativescript-globals.ts b/packages/zone-js/dist/nativescript-globals.ts index 3d8144f..7b36f9b 100644 --- a/packages/zone-js/dist/nativescript-globals.ts +++ b/packages/zone-js/dist/nativescript-globals.ts @@ -8,5 +8,14 @@ // }); Zone.__load_patch('nativescript_FileReader', (global: any, Zone: ZoneType, api: _ZonePrivate) => { + const reader = global['FileReader']; + if (reader) { + reader.prototype.onload = reader.prototype.onload || null; + reader.prototype.onerror = reader.prototype.onerror || null; + reader.prototype.onabort = reader.prototype.onabort || null; + reader.prototype.onloadend = reader.prototype.onloadend || null; + reader.prototype.onloadstart = reader.prototype.onloadstart || null; + reader.prototype.onprogress = reader.prototype.onprogress || null; + } api.patchClass('FileReader'); }); diff --git a/packages/zone-js/dist/utils.ts b/packages/zone-js/dist/utils.ts index f3b821a..84df0d6 100644 --- a/packages/zone-js/dist/utils.ts +++ b/packages/zone-js/dist/utils.ts @@ -386,7 +386,7 @@ export function patchClass(className: string, api: _ZonePrivate) { const instance = new OriginalClass(function () {}); let prop; - for (prop of Object.getOwnPropertyNames(instance)) { + for (prop of getAllProperties(instance)) { // https://bugs.webkit.org/show_bug.cgi?id=44721 if (className === 'XMLHttpRequest' && prop === 'responseBlob') continue; (function (prop) { @@ -415,9 +415,23 @@ export function patchClass(className: string, api: _ZonePrivate) { })(prop); } - for (prop in Object.getOwnPropertyNames(OriginalClass)) { - if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) { + for (prop of Object.getOwnPropertyNames(OriginalClass)) { + if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop) && isWritable(_global[className], prop)) { _global[className][prop] = OriginalClass[prop]; } } } + +function getAllProperties(toCheck: any, lastProto = Object.prototype) { + const props = []; + let obj = toCheck; + do { + props.push(...Object.getOwnPropertyNames(obj)); + } while ((obj = Object.getPrototypeOf(obj)) && obj !== lastProto); + + return Array.from(new Set(props)); +} + +function isWritable(obj: T, key: keyof T) { + return Object.getOwnPropertyDescriptor(obj, key)?.writable ?? true; +}