1<!doctype html> 2<html> 3<body> 4 <script> 5 !function(G) { 6 var domprops = []; 7 var objs = [ G ]; 8 var tagNames = [ 9 "a", 10 "abbr", 11 "acronym", 12 "address", 13 "applet", 14 "area", 15 "article", 16 "aside", 17 "audio", 18 "b", 19 "base", 20 "basefont", 21 "bdi", 22 "bdo", 23 "bgsound", 24 "big", 25 "blink", 26 "blockquote", 27 "body", 28 "br", 29 "button", 30 "canvas", 31 "caption", 32 "center", 33 "checked", 34 "cite", 35 "code", 36 "col", 37 "colgroup", 38 "command", 39 "comment", 40 "compact", 41 "content", 42 "data", 43 "datalist", 44 "dd", 45 "declare", 46 "defer", 47 "del", 48 "details", 49 "dfn", 50 "dialog", 51 "dir", 52 "disabled", 53 "div", 54 "dl", 55 "dt", 56 "element", 57 "em", 58 "embed", 59 "fieldset", 60 "figcaption", 61 "figure", 62 "font", 63 "footer", 64 "form", 65 "frame", 66 "frameset", 67 "h1", 68 "h2", 69 "h3", 70 "h4", 71 "h5", 72 "h6", 73 "head", 74 "header", 75 "hgroup", 76 "hr", 77 "html", 78 "i", 79 "iframe", 80 "image", 81 "img", 82 "input", 83 "ins", 84 "isindex", 85 "ismap", 86 "kbd", 87 "keygen", 88 "label", 89 "legend", 90 "li", 91 "link", 92 "listing", 93 "main", 94 "map", 95 "mark", 96 "marquee", 97 "math", 98 "menu", 99 "menuitem", 100 "meta", 101 "meter", 102 "multicol", 103 "multiple", 104 "nav", 105 "nextid", 106 "nobr", 107 "noembed", 108 "noframes", 109 "nohref", 110 "noresize", 111 "noscript", 112 "noshade", 113 "nowrap", 114 "object", 115 "ol", 116 "optgroup", 117 "option", 118 "output", 119 "p", 120 "param", 121 "picture", 122 "plaintext", 123 "pre", 124 "progress", 125 "q", 126 "rb", 127 "readonly", 128 "rp", 129 "rt", 130 "rtc", 131 "ruby", 132 "s", 133 "samp", 134 "script", 135 "section", 136 "select", 137 "selected", 138 "shadow", 139 "slot", 140 "small", 141 "source", 142 "spacer", 143 "span", 144 "strike", 145 "strong", 146 "style", 147 "sub", 148 "summary", 149 "sup", 150 "svg", 151 "table", 152 "tbody", 153 "td", 154 "template", 155 "textarea", 156 "tfoot", 157 "th", 158 "thead", 159 "time", 160 "title", 161 "tr", 162 "track", 163 "tt", 164 "u", 165 "ul", 166 "var", 167 "video", 168 "wbr", 169 "xmp", 170 "XXX", 171 ]; 172 for (var n = 0; n < tagNames.length; n++) { 173 add(document.createElement(tagNames[n])); 174 } 175 var nsNames = { 176 "http://www.w3.org/1998/Math/MathML": [ 177 "annotation", 178 "annotation-xml", 179 "maction", 180 "maligngroup", 181 "malignmark", 182 "math", 183 "menclose", 184 "merror", 185 "mfenced", 186 "mfrac", 187 "mglyph", 188 "mi", 189 "mlabeledtr", 190 "mlongdiv", 191 "mmultiscripts", 192 "mn", 193 "mo", 194 "mover", 195 "mpadded", 196 "mphantom", 197 "mprescripts", 198 "mroot", 199 "mrow", 200 "ms", 201 "mscarries", 202 "mscarry", 203 "msgroup", 204 "msline", 205 "mspace", 206 "msqrt", 207 "msrow", 208 "mstack", 209 "mstyle", 210 "msub", 211 "msubsup", 212 "msup", 213 "mtable", 214 "mtd", 215 "mtext", 216 "mtr", 217 "munder", 218 "munderover", 219 "none", 220 "semantics", 221 ], 222 "http://www.w3.org/2000/svg": [ 223 "a", 224 "altGlyph", 225 "altGlyphDef", 226 "altGlyphItem", 227 "animate", 228 "animateColor", 229 "animateMotion", 230 "animateTransform", 231 "circle", 232 "clipPath", 233 "color-profile", 234 "cursor", 235 "defs", 236 "desc", 237 "discard", 238 "ellipse", 239 "feBlend", 240 "feColorMatrix", 241 "feComponentTransfer", 242 "feComposite", 243 "feConvolveMatrix", 244 "feDiffuseLighting", 245 "feDisplacementMap", 246 "feDistantLight", 247 "feDropShadow", 248 "feFlood", 249 "feFuncA", 250 "feFuncB", 251 "feFuncG", 252 "feFuncR", 253 "feGaussianBlur", 254 "feImage", 255 "feMerge", 256 "feMergeNode", 257 "feMorphology", 258 "feOffset", 259 "fePointLight", 260 "feSpecularLighting", 261 "feSpotLight", 262 "feTile", 263 "feTurbulence", 264 "filter", 265 "font", 266 "font-face", 267 "font-face-format", 268 "font-face-name", 269 "font-face-src", 270 "font-face-uri", 271 "foreignObject", 272 "g", 273 "glyph", 274 "glyphRef", 275 "hatch", 276 "hatchpath", 277 "hkern", 278 "image", 279 "line", 280 "linearGradient", 281 "marker", 282 "mask", 283 "mesh", 284 "meshgradient", 285 "meshpatch", 286 "meshrow", 287 "metadata", 288 "missing-glyph", 289 "mpath", 290 "path", 291 "pattern", 292 "polygon", 293 "polyline", 294 "radialGradient", 295 "rect", 296 "script", 297 "set", 298 "solidcolor", 299 "stop", 300 "style", 301 "svg", 302 "switch", 303 "symbol", 304 "text", 305 "textPath", 306 "title", 307 "tref", 308 "tspan", 309 "unknown", 310 "use", 311 "view", 312 "vkern", 313 ], 314 }; 315 if (document.createElementNS) for (var ns in nsNames) { 316 for (var n = 0; n < nsNames[ns].length; n++) { 317 add(document.createElementNS(ns, nsNames[ns][n])); 318 } 319 } 320 var skips = [ 321 G.alert, 322 G.back, 323 G.blur, 324 G.captureEvents, 325 G.clearImmediate, 326 G.clearInterval, 327 G.clearTimeout, 328 G.close, 329 G.confirm, 330 G.console, 331 G.dump, 332 G.fetch, 333 G.find, 334 G.focus, 335 G.forward, 336 G.getAttention, 337 G.history, 338 G.home, 339 G.location, 340 G.moveBy, 341 G.moveTo, 342 G.navigator, 343 G.open, 344 G.openDialog, 345 G.print, 346 G.process, 347 G.prompt, 348 G.resizeBy, 349 G.resizeTo, 350 G.setImmediate, 351 G.setInterval, 352 G.setTimeout, 353 G.showModalDialog, 354 G.sizeToContent, 355 G.stop, 356 ]; 357 var types = []; 358 var interfaces = [ 359 "beforeunloadevent", 360 "compositionevent", 361 "customevent", 362 "devicemotionevent", 363 "deviceorientationevent", 364 "dragevent", 365 "event", 366 "events", 367 "focusevent", 368 "hashchangeevent", 369 "htmlevents", 370 "keyboardevent", 371 "messageevent", 372 "mouseevent", 373 "mouseevents", 374 "storageevent", 375 "svgevents", 376 "textevent", 377 "touchevent", 378 "uievent", 379 "uievents", 380 ]; 381 var i = 0, full = false; 382 var addEvent = document.createEvent ? function(type) { 383 if (~indexOf(types, type)) return; 384 types.push(type); 385 for (var j = 0; j < interfaces.length; j++) try { 386 var event = document.createEvent(interfaces[j]); 387 event.initEvent(type, true, true); 388 add(event); 389 } catch (e) {} 390 } : function() {}; 391 var scanProperties = Object.getOwnPropertyNames ? function(o, fn) { 392 var names = Object.getOwnPropertyNames(o); 393 names.forEach(fn); 394 for (var k in o) if (!~indexOf(names, k)) fn(k); 395 } : function(o, fn) { 396 for (var k in o) fn(k); 397 }; 398 setTimeout(function next() { 399 for (var j = 10; --j >= 0 && i < objs.length; i++) { 400 var o = objs[i]; 401 var skip = ~indexOf(skips, o); 402 try { 403 scanProperties(o, function(k) { 404 if (!~indexOf(domprops, k)) domprops.push(k); 405 if (/^on/.test(k)) addEvent(k.slice(2)); 406 if (!full) try { 407 add(o[k]); 408 } catch (e) {} 409 }); 410 } catch (e) {} 411 if (skip || full) continue; 412 try { 413 add(o.__proto__); 414 } catch (e) {} 415 try { 416 add(o.prototype); 417 } catch (e) {} 418 try { 419 add(new o()); 420 } catch (e) {} 421 try { 422 add(o()); 423 } catch (e) {} 424 } 425 if (!full && objs.length > 20000) { 426 alert(objs.length); 427 full = true; 428 } 429 if (i < objs.length) { 430 setTimeout(next, 0); 431 } else { 432 document.write('<pre>[\n "' + domprops.sort().join('",\n "').replace(/&/g, "&").replace(/</g, "<") + '"\n]</pre>'); 433 } 434 }, 0); 435 436 function add(o) { 437 if (o) switch (typeof o) { 438 case "function": 439 case "object": 440 if (!~indexOf(objs, o)) objs.push(o); 441 } 442 } 443 444 function indexOf(list, value) { 445 var j = list.length; 446 while (--j >= 0) { 447 if (list[j] === value) break; 448 } 449 return j; 450 } 451 }(function() { 452 return this; 453 }()); 454 </script> 455</body> 456</html> 457