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, "&amp;").replace(/</g, "&lt;") + '"\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