<html> <head> </head> <body> <script>(function(){ var props = {}; function addObject(obj) { if (obj == null) return; try { Object.getOwnPropertyNames(obj).forEach(add); } catch(ex) {} if (obj.prototype) { Object.getOwnPropertyNames(obj.prototype).forEach(add); } if (typeof obj == "function") { try { Object.getOwnPropertyNames(new obj).forEach(add); } catch(ex) {} } } function add(name) { props[name] = true; } Object.getOwnPropertyNames(window).forEach(function(thing){ addObject(window[thing]); }); try { addObject(new Event("click")); addObject(new Event("contextmenu")); addObject(new Event("mouseup")); addObject(new Event("mousedown")); addObject(new Event("keydown")); addObject(new Event("keypress")); addObject(new Event("keyup")); } catch(ex) {} var ta = document.createElement("textarea"); ta.style.width = "100%"; ta.style.height = "20em"; ta.style.boxSizing = "border-box"; <!-- ta.value = Object.keys(props).sort(cmp).map(function(name){ --> <!-- return JSON.stringify(name); --> <!-- }).join(",\n"); --> ta.value = JSON.stringify({ vars: [], props: Object.keys(props).sort(cmp) }, null, 2); document.body.appendChild(ta); function cmp(a, b) { a = a.toLowerCase(); b = b.toLowerCase(); return a < b ? -1 : a > b ? 1 : 0; } })();</script> </body> </html>