Skip to content

Instantly share code, notes, and snippets.

@jewel-andraia
Last active December 14, 2015 17:29
Show Gist options
  • Save jewel-andraia/5122272 to your computer and use it in GitHub Desktop.
Save jewel-andraia/5122272 to your computer and use it in GitHub Desktop.
MutationObserver tests - Firefox 19 - Reddit Enhancement Suite v4.1.5
  1. Declare var MutationObserver in the global scope (i.e. outside of a function) in the plugin

  2. Observe that window.MutationObserver is undefined.
    (In RES v4.1.5, this manifests as MutationObserver == undefined || null == null)

  3. Remove var MutationObserver from the global scope code.

  4. Observe that window.MutationObserver is a constructor function, is truthy, and logs as null unless you cast it a little.
    (After fixing this in RES, this manifests as MutationObserver == the constructor)

  5. Leave out the var MutationObserver and add a variable that points to the MU constructor.

  6. Observe that the pointer works sanely.
    In other words, Firefox will let you store the constructor and use it later.


Conclusion: RES should avoid var MutationObserver and instead use BrowserDetect.MutationObserver = window.MutationObserver || ... null and, to create an instance, var mutationObserver = new BrowserDetect.MutationObserver(function(m) { ... });

(This is not the only option, but it seems the tidiest).

var MutationObserver;
window.console.log(0, window.MutationObserver);
window.console.log(1, typeof window.MutationObserver);
window.console.log(2, (window.MutationObserver));
window.console.log(3, typeof (window.MutationObserver));
window.console.log(4, window.MutationObserver + "");
window.console.log(5, "" + window.MutationObserver);
window.console.log(6, window.MutationObserver || false);
window.console.log(7, typeof(window.MutationObserver || false));
window.console.log(8, false || window.MutationObserver);
window.console.log(9, typeof(false || window.MutationObserver));
window.console.log(10, window.MutationObserver || 1);
window.console.log(11, typeof(window.MutationObserver || 1));
window.console.log(12, 1 || window.MutationObserver);
window.console.log(13, typeof(1 || window.MutationObserver));
window.console.log(14, window.MutationObserver + 1);
window.console.log(15, 1 + window.MutationObserver);
info: reddit_res: 0 null
info: reddit_res: 1 undefined
info: reddit_res: 2 null
info: reddit_res: 3 undefined
info: reddit_res: 4 undefined
info: reddit_res: 5 undefined
info: reddit_res: 6 false
info: reddit_res: 7 boolean
info: reddit_res: 8 null
info: reddit_res: 9 undefined
info: reddit_res: 10 1
info: reddit_res: 11 number
info: reddit_res: 12 1
info: reddit_res: 13 number
info: reddit_res: 14 null
info: reddit_res: 15 null
// var MutationObserver;
window.console.log(0, window.MutationObserver);
window.console.log(1, typeof window.MutationObserver);
window.console.log(2, (window.MutationObserver));
window.console.log(3, typeof (window.MutationObserver));
window.console.log(4, window.MutationObserver + "");
window.console.log(5, "" + window.MutationObserver);
window.console.log(6, window.MutationObserver || false);
window.console.log(7, typeof(window.MutationObserver || false));
window.console.log(8, false || window.MutationObserver);
window.console.log(9, typeof(false || window.MutationObserver));
window.console.log(10, window.MutationObserver || 1);
window.console.log(11, typeof(window.MutationObserver || 1));
window.console.log(12, 1 || window.MutationObserver);
window.console.log(13, typeof(1 || window.MutationObserver));
window.console.log(14, window.MutationObserver + 1);
window.console.log(15, 1 + window.MutationObserver);
info: reddit_res: 0 null
info: reddit_res: 1 function
info: reddit_res: 2 null
info: reddit_res: 3 function
info: reddit_res: 4 [object MutationObserver]
info: reddit_res: 5 [object MutationObserver]
info: reddit_res: 6 null
info: reddit_res: 7 function
info: reddit_res: 8 null
info: reddit_res: 9 function
info: reddit_res: 10 null
info: reddit_res: 11 function
info: reddit_res: 12 1
info: reddit_res: 13 number
info: reddit_res: 14 [object MutationObserver]1
info: reddit_res: 15 1[object MutationObserver]
// var MutationObserver;
var mo = window.MutationObserver;
window.console.log(0, mo);
window.console.log(1, typeof mo);
window.console.log(2, (mo));
window.console.log(3, typeof (mo));
window.console.log(4, mo + "");
window.console.log(5, "" + mo);
window.console.log(6, mo || false);
window.console.log(7, typeof(mo || false));
window.console.log(8, false || mo);
window.console.log(9, typeof(false || mo));
window.console.log(10, mo || 1);
window.console.log(11, typeof(mo || 1));
window.console.log(12, 1 || mo);
window.console.log(13, typeof(1 || mo));
window.console.log(14, mo + 1);
window.console.log(15, 1 + mo);
info: reddit_res: 0 null
info: reddit_res: 1 function
info: reddit_res: 2 null
info: reddit_res: 3 function
info: reddit_res: 4 [object MutationObserver]
info: reddit_res: 5 [object MutationObserver]
info: reddit_res: 6 null
info: reddit_res: 7 function
info: reddit_res: 8 null
info: reddit_res: 9 function
info: reddit_res: 10 null
info: reddit_res: 11 function
info: reddit_res: 12 1
info: reddit_res: 13 number
info: reddit_res: 14 [object MutationObserver]1
info: reddit_res: 15 1[object MutationObserver]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment