Jia Li created CB-13179: --------------------------- Summary: Cordova file plugin onEvent(such as onload) should be invoked with _realReader as this Key: CB-13179 URL: https://issues.apache.org/jira/browse/CB-13179 Project: Apache Cordova Issue Type: Improvement Components: cordova-plugin-file Environment: Android, ios, Browser Reporter: Jia Li Priority: Minor
When `FileReader` add onEvent listener such as `onload`, it will add the listener to inner `_realReader` , but when it invoke the listener, it use the FileReader as `this`. 1. When add onload listener in application code. ```javascript var fileReader = new FileReader(); fileReader.onload = function() {}; ``` it will call `www/FileReader.js defineEvent` ```javascript function defineEvent(eventName) { utils.defineGetterSetter(FileReader.prototype, eventName, function() { return this._realReader[eventName] || null; }, function(value) { this._realReader[eventName] = value; }); } ``` the listener is added to `this._realReader`. And when the listener is triggered for example in `readSuccessCallback` it will invoke the method with `this`. ```javascript this.onload(new ProgressEvent("load", {target:this})); ``` in the normal senario, it will ok, but when it work with some polyfilles such as `zone.js of angular4`, it will fail because `zone.js` have some special handling which require the `this` object be the same when add listener and invoke listener. https://github.com/angular/zone.js/issues/868 -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org