diff --git a/src/standard/configure.html b/src/standard/configure.html index 97587ebfe0..0be2e913ff 100644 --- a/src/standard/configure.html +++ b/src/standard/configure.html @@ -43,6 +43,11 @@ var usePolyfillProto = Polymer.Settings.usePolyfillProto; + // When true, `this.properties` is bad juju due to obsolete `properties` + // accessors on instances of HTMLElement + var avoidInstanceProperties = + Boolean(Object.getOwnPropertyDescriptor(document.documentElement, 'properties')); + Polymer.Base._addFeature({ // storage for configuration @@ -101,7 +106,16 @@ this._configureProperties(this.behaviors[i].properties, config); } // prototypical behavior - this._configureProperties(this.properties, config); + // Read `properties` off of the prototype, as a concession to non-spec + // compliant browsers (e.g. Android UC Browser 11.2.0.915) where + // a.) HTMLElement's have a non-spec `properties` property, and + // b.) the `properties` accessor is on instances rather than + // `HTMLElement.prototype`; going under the instance to the prototype + // avoids the problem. Note can't always go to __proto__ due to IE10 + // hence conditional, but IE10 doesn't suffer from the instance properties + // issue (happy coincidence of browser quirks). + this._configureProperties(avoidInstanceProperties ? + this.__proto__.properties : this.properties, config); // TODO(sorvell): it *may* be faster to loop over _propertyInfo but // there are some test issues. //this._configureProperties(this._propertyInfo, config);