@samitouri / QOS-React / commits / 8216125d82

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