Fallback to legacy set/get in old versions of FF (#6930)
Andrew Imm committed
Jun 2, 2016 at 11:35 UTC
8216125d82317779fc5db20beec359f0e946d8b1
1 file changed
+22
-4
src/renderers/dom/client/inputValueTracking.js
+22
-4
@@ -58,10 +58,28 @@ var inputValueTracking = {
58
59
var node = ReactDOMComponentTree.getNodeFromInstance(inst);
60
var valueField = isCheckable(node) ? 'checked' : 'value';
61
- var descriptor = Object.getOwnPropertyDescriptor(
62
- node.constructor.prototype,
63
- valueField
64
- );
61
+ var descriptor;
62
+ try {
63
+ // Accessing quick-stubbed properties of prototypes in older versions of
64
+ // Firefox will throw a NS_ERROR_XPC_BAD_OP_ON_WN_PROTO exception
65
+ descriptor = Object.getOwnPropertyDescriptor(
66
+ node.constructor.prototype,
67
+ valueField
68
+ );
69
+ } catch (e) {
70
+ var proto = node.constructor.prototype;
71
+ // Attempt to fall back to Firefox's deprecated setters / getters
72
+ if (
73
+ typeof proto.__lookupSetter__ === 'function' &&
74
+ typeof proto.__lookupGetter__ === 'function'
75
+ ) {
76
+ descriptor = {
77
+ enumerable: true,
78
+ get: proto.__lookupGetter__(valueField),
79
+ set: proto.__lookupSetter__(valueField),
80
+ };
81
+ }
82
+ }
83
84
var currentValue = '' + node[valueField];
85