code: function patchViaCapturingAllTheEvents() {
      var _loop_1 = function (i) {
          var property = eventNames[i];
          var onproperty = 'on' + property;
          self.addEventListener(property, function (event) {
              var elt = event.target, bound, source;
              if (elt) {
                  source = elt.constructor['name'] + '.' + onproperty;
              }
              else {
                  source = 'unknown.' + onproperty;
              }
              while (elt) {
                  if (elt[onproperty] && !elt[onproperty][unboundKey]) {
                      bound = Zone.current.wrap(elt[onproperty], source);
                      bound[unboundKey] = elt[onproperty];
                      elt[onproperty] = bound;
                  }
                  elt = elt.parentElement;
              }
          }, true);
      };
      for (var i = 0; i < eventNames.length; i++) {
          _loop_1(i);
      }
  }
docs: Whenever any eventListener fires, we check the eventListener target and all parents for `onwhatever` properties and replace them with zone-bound functions - Chrome (for now)