Bookmarklet to get the HTML5 innerHTML of the document node. javascript:(function()%20%7B%0D%0Avar%20textReserved%20%3D%20%2F(%3C)%7C(%3E)%7C(%26)%7C(%5Cu00A0)%2Fg%3B%0D%0Afunction%20escapeTextNodeValue(data)%20%7B%0D%0A%20%20%20%20return%20data.replace(textReserved%2C%20function(m%2C%20a%2C%20b%2C%20c)%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20(a)%20return%20%22%26lt%3B%22%3B%0D%0A%20%20%20%20%20%20%20%20if%20(b)%20return%20%22%26gt%3B%22%0D%0A%20%20%20%20%20%20%20%20if%20(c)%20return%20%22%26amp%3B%22%3B%0D%0A%20%20%20%20%20%20%20%20return%20%22%26nbsp%3B%22%0D%0A%20%20%20%20%7D)%3B%0D%0A%7D%0D%0Avar%20attrReserved%20%3D%20%2F(%26)%7C(%22)%7C(%5Cu00A0)%2Fg%3B%0D%0Afunction%20escapeAttrNodeValue(value)%20%7B%0D%0A%20%20%20%20return%20value.replace(attrReserved%2C%20function(m%2C%20a%2C%20b)%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20(a)%20return%20%22%26amp%3B%22%3B%0D%0A%20%20%20%20%20%20%20%20if%20(b)%20return%20%22%26quot%3B%22%3B%0D%0A%20%20%20%20%20%20%20%20return%20%22%26nbsp%3B%22%3B%0D%0A%20%20%20%20%7D)%3B%0D%0A%7D%0D%0Afunction%20isVoidElement(tag)%20%7B%0D%0A%20%20%20%20%20return%20tag%20%3D%3D%3D%20%22area%22%20%7C%7C%20tag%20%3D%3D%3D%20%22base%22%20%7C%7C%20tag%20%3D%3D%3D%20%22basefont%22%20%7C%7C%20tag%20%3D%3D%3D%20%22bgsound%22%20%7C%7C%20tag%20%3D%3D%3D%20%22br%22%20%7C%7C%20tag%20%3D%3D%3D%20%22col%22%20%7C%7C%20tag%20%3D%3D%3D%20%22command%22%20%7C%7C%20tag%20%3D%3D%3D%20%22embed%22%20%7C%7C%20tag%20%3D%3D%3D%20%22event-source%22%20%7C%7C%20tag%20%3D%3D%3D%20%22frame%22%20%7C%7C%20tag%20%3D%3D%3D%20%22hr%22%20%7C%7C%20tag%20%3D%3D%3D%20%22img%22%20%7C%7C%20tag%20%3D%3D%3D%20%22input%22%20%7C%7C%20tag%20%3D%3D%3D%20%22link%22%20%7C%7C%20tag%20%3D%3D%3D%20%22meta%22%20%7C%7C%20tag%20%3D%3D%3D%20%22param%22%20%7C%7C%20tag%20%3D%3D%3D%20%22spacer%22%20%7C%7C%20tag%20%3D%3D%3D%20%22source%22%20%7C%7C%20tag%20%3D%3D%3D%20%22wbr%22%3B%20%20%20%20%20%0D%0A%7D%0D%0Afunction%20needsNewlinePrefix(tag)%20%7B%0D%0A%20%20%20%20return%20tag%20%3D%3D%3D%20%22listing%22%20%7C%7C%20tag%20%3D%3D%3D%20%22pre%22%20%7C%7C%20tag%20%3D%3D%3D%20%22textarea%22%3B%0D%0A%7D%0D%0A%0D%0Afunction%20isCDATA(tag)%20%7B%0D%0A%20%20%20%20return%20tag%20%3D%3D%3D%20%22iframe%22%20%7C%7C%20tag%20%3D%3D%3D%20%22noembed%22%20%7C%7C%20tag%20%3D%3D%3D%20%22noframes%22%20%7C%7C%20tag%20%3D%3D%3D%20%22noscript%22%20%7C%7C%20tag%20%3D%3D%3D%20%22plaintext%22%20%7C%7C%20tag%20%3D%3D%3D%20%22script%22%20%7C%7C%20tag%20%3D%3D%3D%20%22style%22%20%7C%7C%20tag%20%3D%3D%3D%20%22xmp%22%3B%0D%0A%7D%0D%0A%0D%0Afunction%20getAttrHTML(attr)%20%7B%0D%0A%20%20%20%20var%20markup%20%3D%20attr.name.toLowerCase()%3B%0D%0A%20%20%20%20markup%20%2B%3D%20'%3D%22'%3B%0D%0A%20%20%20%20markup%20%2B%3D%20escapeAttrNodeValue(attr.value)%3B%0D%0A%20%20%20%20markup%20%2B%3D%20'%22'%3B%0D%0A%20%20%20%20return%20markup%3B%0D%0A%7D%0D%0Afunction%20getInnerHTML(node)%20%7B%0D%0A%20%20%20%20var%20markup%20%3D%20%22%22%3B%0D%0A%20%20%20%20if%20(node.hasChildNodes())%20%7B%0D%0A%20%20%20%20%20%20%20%20var%20current%20%3D%20node.firstChild%3B%0D%0A%20%20%20%20%20%20%20%20var%20cdata%20%3D%20null%3B%0D%0A%20%20%20%20%20%20%20%20for%20(%20%3B%20%3B%20)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20switch%20(current.nodeType)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%201%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tag%20%3D%20current.tagName.toLowerCase()%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(cdata%20%3D%3D%20null%20%26%26%20isCDATA(tag))%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cdata%20%3D%20current%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%3C%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20tag%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20attrs%20%3D%20current.attributes%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20(var%20i%20%3D%200%3B%20i%20%3C%20attrs.length%3B%20%2B%2Bi)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%20%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20getAttrHTML(attrs%5Bi%5D)%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%3E%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(needsNewlinePrefix(tag))%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%5Cn%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%203%3A%20case%204%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20cdata%20!%3D%20null%20%3F%20current.data%20%3A%20escapeTextNodeValue(current.data)%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%207%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%3C%3F%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20current.target%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20current.data%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%3F%3E%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%208%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%3C!--%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20current.data%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22--%3E%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%2010%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%3C!DOCTYPE%20%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20current.name.toLowerCase()%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%3E%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw%20%22INVALID_STATE_ERR%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(current.firstChild)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20current%20%3D%20current.firstChild%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20(%20%3B%20%3B%20)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(current.nodeType%20%3D%3D%3D%201)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tag%20%3D%20current.tagName.toLowerCase()%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(!isVoidElement(tag))%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%3C%2F%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20tag%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20%2B%3D%20%22%3E%22%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(current%20%3D%3D%20cdata)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cdata%20%3D%20null%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(current%20%3D%3D%20node)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20markup%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(current.nextSibling)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20current%20%3D%20current.nextSibling%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20current%20%3D%20current.parentNode%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20return%20markup%3B%0D%0A%7D%0D%0Avar%20uri%20%3D%20%22data%3Atext%2Fplain%3Bcharset%3Dutf-8%2C%22%20%2B%20encodeURIComponent(getInnerHTML(document))%3B%0D%0Awindow.open(uri)%3B%0D%0A%7D)()%3B Source: (function() { var textReserved = /(<)|(>)|(&)|(\u00A0)/g; function escapeTextNodeValue(data) { return data.replace(textReserved, function(m, a, b, c) { if (a) return "<"; if (b) return ">" if (c) return "&"; return " " }); } var attrReserved = /(&)|(")|(\u00A0)/g; function escapeAttrNodeValue(value) { return value.replace(attrReserved, function(m, a, b) { if (a) return "&"; if (b) return """; return " "; }); } function isVoidElement(tag) { return tag === "area" || tag === "base" || tag === "basefont" || tag === "bgsound" || tag === "br" || tag === "col" || tag === "command" || tag === "embed" || tag === "event-source" || tag === "frame" || tag === "hr" || tag === "img" || tag === "input" || tag === "link" || tag === "meta" || tag === "param" || tag === "spacer" || tag === "source" || tag === "wbr"; } function needsNewlinePrefix(tag) { return tag === "listing" || tag === "pre" || tag === "textarea"; } function isCDATA(tag) { return tag === "iframe" || tag === "noembed" || tag === "noframes" || tag === "noscript" || tag === "plaintext" || tag === "script" || tag === "style" || tag === "xmp"; } function getAttrHTML(attr) { var markup = attr.name.toLowerCase(); markup += '="'; markup += escapeAttrNodeValue(attr.value); markup += '"'; return markup; } function getInnerHTML(node) { var markup = ""; if (node.hasChildNodes()) { var current = node.firstChild; var cdata = null; for ( ; ; ) { switch (current.nodeType) { case 1: var tag = current.tagName.toLowerCase(); if (cdata == null && isCDATA(tag)) { cdata = current; } markup += "<"; markup += tag; var attrs = current.attributes; for (var i = 0; i < attrs.length; ++i) { markup += " "; markup += getAttrHTML(attrs[i]); } markup += ">"; if (needsNewlinePrefix(tag)) { markup += "\n"; } break; case 3: case 4: markup += cdata != null ? current.data : escapeTextNodeValue(current.data); break; case 7: markup += ""; break; case 8: markup += ""; break; case 10: markup += ""; break; default: throw "INVALID_STATE_ERR"; } if (current.firstChild) { current = current.firstChild; } else { for ( ; ; ) { if (current.nodeType === 1) { var tag = current.tagName.toLowerCase(); if (!isVoidElement(tag)) { markup += ""; } if (current == cdata) { cdata = null; } } if (current == node) { return markup; } else if (current.nextSibling) { current = current.nextSibling; break; } else { current = current.parentNode; } } } } } return markup; } var uri = "data:text/plain;charset=utf-8," + encodeURIComponent(getInnerHTML(document)); window.open(uri); })();