| <!doctype html> |
| <html> |
| <body> |
| <script> |
| !function(G) { |
| var domprops = []; |
| var objs = [ G ]; |
| var tagNames = [ |
| "a", |
| "abbr", |
| "acronym", |
| "address", |
| "applet", |
| "area", |
| "article", |
| "aside", |
| "audio", |
| "b", |
| "base", |
| "basefont", |
| "bdi", |
| "bdo", |
| "bgsound", |
| "big", |
| "blink", |
| "blockquote", |
| "body", |
| "br", |
| "button", |
| "canvas", |
| "caption", |
| "center", |
| "checked", |
| "cite", |
| "code", |
| "col", |
| "colgroup", |
| "command", |
| "comment", |
| "compact", |
| "content", |
| "data", |
| "datalist", |
| "dd", |
| "declare", |
| "defer", |
| "del", |
| "details", |
| "dfn", |
| "dialog", |
| "dir", |
| "disabled", |
| "div", |
| "dl", |
| "dt", |
| "element", |
| "em", |
| "embed", |
| "fieldset", |
| "figcaption", |
| "figure", |
| "font", |
| "footer", |
| "form", |
| "frame", |
| "frameset", |
| "h1", |
| "h2", |
| "h3", |
| "h4", |
| "h5", |
| "h6", |
| "head", |
| "header", |
| "hgroup", |
| "hr", |
| "html", |
| "i", |
| "iframe", |
| "image", |
| "img", |
| "input", |
| "ins", |
| "isindex", |
| "ismap", |
| "kbd", |
| "keygen", |
| "label", |
| "legend", |
| "li", |
| "link", |
| "listing", |
| "main", |
| "map", |
| "mark", |
| "marquee", |
| "math", |
| "menu", |
| "menuitem", |
| "meta", |
| "meter", |
| "multicol", |
| "multiple", |
| "nav", |
| "nextid", |
| "nobr", |
| "noembed", |
| "noframes", |
| "nohref", |
| "noresize", |
| "noscript", |
| "noshade", |
| "nowrap", |
| "object", |
| "ol", |
| "optgroup", |
| "option", |
| "output", |
| "p", |
| "param", |
| "picture", |
| "plaintext", |
| "pre", |
| "progress", |
| "q", |
| "rb", |
| "readonly", |
| "rp", |
| "rt", |
| "rtc", |
| "ruby", |
| "s", |
| "samp", |
| "script", |
| "section", |
| "select", |
| "selected", |
| "shadow", |
| "slot", |
| "small", |
| "source", |
| "spacer", |
| "span", |
| "strike", |
| "strong", |
| "style", |
| "sub", |
| "summary", |
| "sup", |
| "svg", |
| "table", |
| "tbody", |
| "td", |
| "template", |
| "textarea", |
| "tfoot", |
| "th", |
| "thead", |
| "time", |
| "title", |
| "tr", |
| "track", |
| "tt", |
| "u", |
| "ul", |
| "var", |
| "video", |
| "wbr", |
| "xmp", |
| "XXX", |
| ]; |
| for (var n = 0; n < tagNames.length; n++) { |
| add(document.createElement(tagNames[n])); |
| } |
| var nsNames = { |
| "http://www.w3.org/1998/Math/MathML": [ |
| "annotation", |
| "annotation-xml", |
| "maction", |
| "maligngroup", |
| "malignmark", |
| "math", |
| "menclose", |
| "merror", |
| "mfenced", |
| "mfrac", |
| "mglyph", |
| "mi", |
| "mlabeledtr", |
| "mlongdiv", |
| "mmultiscripts", |
| "mn", |
| "mo", |
| "mover", |
| "mpadded", |
| "mphantom", |
| "mprescripts", |
| "mroot", |
| "mrow", |
| "ms", |
| "mscarries", |
| "mscarry", |
| "msgroup", |
| "msline", |
| "mspace", |
| "msqrt", |
| "msrow", |
| "mstack", |
| "mstyle", |
| "msub", |
| "msubsup", |
| "msup", |
| "mtable", |
| "mtd", |
| "mtext", |
| "mtr", |
| "munder", |
| "munderover", |
| "none", |
| "semantics", |
| ], |
| "http://www.w3.org/2000/svg": [ |
| "a", |
| "altGlyph", |
| "altGlyphDef", |
| "altGlyphItem", |
| "animate", |
| "animateColor", |
| "animateMotion", |
| "animateTransform", |
| "circle", |
| "clipPath", |
| "color-profile", |
| "cursor", |
| "defs", |
| "desc", |
| "discard", |
| "ellipse", |
| "feBlend", |
| "feColorMatrix", |
| "feComponentTransfer", |
| "feComposite", |
| "feConvolveMatrix", |
| "feDiffuseLighting", |
| "feDisplacementMap", |
| "feDistantLight", |
| "feDropShadow", |
| "feFlood", |
| "feFuncA", |
| "feFuncB", |
| "feFuncG", |
| "feFuncR", |
| "feGaussianBlur", |
| "feImage", |
| "feMerge", |
| "feMergeNode", |
| "feMorphology", |
| "feOffset", |
| "fePointLight", |
| "feSpecularLighting", |
| "feSpotLight", |
| "feTile", |
| "feTurbulence", |
| "filter", |
| "font", |
| "font-face", |
| "font-face-format", |
| "font-face-name", |
| "font-face-src", |
| "font-face-uri", |
| "foreignObject", |
| "g", |
| "glyph", |
| "glyphRef", |
| "hatch", |
| "hatchpath", |
| "hkern", |
| "image", |
| "line", |
| "linearGradient", |
| "marker", |
| "mask", |
| "mesh", |
| "meshgradient", |
| "meshpatch", |
| "meshrow", |
| "metadata", |
| "missing-glyph", |
| "mpath", |
| "path", |
| "pattern", |
| "polygon", |
| "polyline", |
| "radialGradient", |
| "rect", |
| "script", |
| "set", |
| "solidcolor", |
| "stop", |
| "style", |
| "svg", |
| "switch", |
| "symbol", |
| "text", |
| "textPath", |
| "title", |
| "tref", |
| "tspan", |
| "unknown", |
| "use", |
| "view", |
| "vkern", |
| ], |
| }; |
| if (document.createElementNS) for (var ns in nsNames) { |
| for (var n = 0; n < nsNames[ns].length; n++) { |
| add(document.createElementNS(ns, nsNames[ns][n])); |
| } |
| } |
| var skips = [ |
| G.alert, |
| G.back, |
| G.blur, |
| G.captureEvents, |
| G.clearImmediate, |
| G.clearInterval, |
| G.clearTimeout, |
| G.close, |
| G.confirm, |
| G.console, |
| G.dump, |
| G.fetch, |
| G.find, |
| G.focus, |
| G.forward, |
| G.getAttention, |
| G.history, |
| G.home, |
| G.location, |
| G.moveBy, |
| G.moveTo, |
| G.navigator, |
| G.open, |
| G.openDialog, |
| G.print, |
| G.process, |
| G.prompt, |
| G.resizeBy, |
| G.resizeTo, |
| G.setImmediate, |
| G.setInterval, |
| G.setTimeout, |
| G.showModalDialog, |
| G.sizeToContent, |
| G.stop, |
| ]; |
| var types = []; |
| var interfaces = [ |
| "beforeunloadevent", |
| "compositionevent", |
| "customevent", |
| "devicemotionevent", |
| "deviceorientationevent", |
| "dragevent", |
| "event", |
| "events", |
| "focusevent", |
| "hashchangeevent", |
| "htmlevents", |
| "keyboardevent", |
| "messageevent", |
| "mouseevent", |
| "mouseevents", |
| "storageevent", |
| "svgevents", |
| "textevent", |
| "touchevent", |
| "uievent", |
| "uievents", |
| ]; |
| var i = 0, full = false; |
| var addEvent = document.createEvent ? function(type) { |
| if (~indexOf(types, type)) return; |
| types.push(type); |
| for (var j = 0; j < interfaces.length; j++) try { |
| var event = document.createEvent(interfaces[j]); |
| event.initEvent(type, true, true); |
| add(event); |
| } catch (e) {} |
| } : function() {}; |
| var scanProperties = Object.getOwnPropertyNames ? function(o, fn) { |
| var names = Object.getOwnPropertyNames(o); |
| names.forEach(fn); |
| for (var k in o) if (!~indexOf(names, k)) fn(k); |
| } : function(o, fn) { |
| for (var k in o) fn(k); |
| }; |
| setTimeout(function next() { |
| for (var j = 10; --j >= 0 && i < objs.length; i++) { |
| var o = objs[i]; |
| var skip = ~indexOf(skips, o); |
| try { |
| scanProperties(o, function(k) { |
| if (!~indexOf(domprops, k)) domprops.push(k); |
| if (/^on/.test(k)) addEvent(k.slice(2)); |
| if (!full) try { |
| add(o[k]); |
| } catch (e) {} |
| }); |
| } catch (e) {} |
| if (skip || full) continue; |
| try { |
| add(o.__proto__); |
| } catch (e) {} |
| try { |
| add(o.prototype); |
| } catch (e) {} |
| try { |
| add(new o()); |
| } catch (e) {} |
| try { |
| add(o()); |
| } catch (e) {} |
| } |
| if (!full && objs.length > 20000) { |
| alert(objs.length); |
| full = true; |
| } |
| if (i < objs.length) { |
| setTimeout(next, 0); |
| } else { |
| document.write('<pre>[\n "' + domprops.sort().join('",\n "').replace(/&/g, "&").replace(/</g, "<") + '"\n]</pre>'); |
| } |
| }, 0); |
| |
| function add(o) { |
| if (o) switch (typeof o) { |
| case "function": |
| case "object": |
| if (!~indexOf(objs, o)) objs.push(o); |
| } |
| } |
| |
| function indexOf(list, value) { |
| var j = list.length; |
| while (--j >= 0) { |
| if (list[j] === value) break; |
| } |
| return j; |
| } |
| }(function() { |
| return this; |
| }()); |
| </script> |
| </body> |
| </html> |