diff --git a/dist/html2canvas.js b/dist/html2canvas.js
index 22b077e..7262c32 100644
--- a/dist/html2canvas.js
+++ b/dist/html2canvas.js
@@ -1542,85 +1542,63 @@ process.umask = function() { return 0; };
var log = require('./log');
var Promise = require('./promise');
-var html2canvasCanvasCloneAttribute = "data-html2canvas-canvas-clone";
-var html2canvasCanvasCloneIndex = 0;
-
-function cloneNodeValues(document, clone, nodeName) {
- var originalNodes = document.getElementsByTagName(nodeName);
- var clonedNodes = clone.getElementsByTagName(nodeName);
- var count = originalNodes.length;
- for (var i = 0; i < count; i++) {
- clonedNodes[i].value = originalNodes[i].value;
- }
-}
-
function restoreOwnerScroll(ownerDocument, x, y) {
if (ownerDocument.defaultView && (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) {
ownerDocument.defaultView.scrollTo(x, y);
}
}
-function labelCanvasElements(ownerDocument) {
- [].slice.call(ownerDocument.querySelectorAll("canvas"), 0).forEach(function(canvas) {
- canvas.setAttribute(html2canvasCanvasCloneAttribute, "canvas-" + html2canvasCanvasCloneIndex++);
- });
-}
-
-function cloneCanvasContents(ownerDocument, documentClone) {
- [].slice.call(ownerDocument.querySelectorAll("[" + html2canvasCanvasCloneAttribute + "]"), 0).forEach(function(canvas) {
- try {
- var clonedCanvas = documentClone.querySelector('[' + html2canvasCanvasCloneAttribute + '="' + canvas.getAttribute(html2canvasCanvasCloneAttribute) + '"]');
- if (clonedCanvas) {
- clonedCanvas.width = canvas.width;
- clonedCanvas.height = canvas.height;
- clonedCanvas.getContext("2d").putImageData(canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height), 0, 0);
- }
- } catch(e) {
- log("Unable to copy canvas content from", canvas, e);
+function cloneCanvasContents(canvas, clonedCanvas) {
+ try {
+ if (clonedCanvas) {
+ clonedCanvas.width = canvas.width;
+ clonedCanvas.height = canvas.height;
+ clonedCanvas.getContext("2d").putImageData(canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height), 0, 0);
}
- canvas.removeAttribute(html2canvasCanvasCloneAttribute);
- });
+ } catch(e) {
+ log("Unable to copy canvas content from", canvas, e);
+ }
}
-function removeScriptNodes(parent) {
- [].slice.call(parent.childNodes, 0).filter(isElementNode).forEach(function(node) {
- if (node.tagName === "SCRIPT") {
- parent.removeChild(node);
- } else {
- removeScriptNodes(node);
- }
- });
- return parent;
-}
-
-function isIE9() {
- return document.documentMode && document.documentMode <= 9;
-}
-
-// https://github.com/niklasvh/html2canvas/issues/503
-function cloneNodeIE9(node, javascriptEnabled) {
+function cloneNode(node, javascriptEnabled) {
var clone = node.nodeType === 3 ? document.createTextNode(node.nodeValue) : node.cloneNode(false);
var child = node.firstChild;
while(child) {
if (javascriptEnabled === true || child.nodeType !== 1 || child.nodeName !== 'SCRIPT') {
- clone.appendChild(cloneNodeIE9(child, javascriptEnabled));
+ clone.appendChild(cloneNode(child, javascriptEnabled));
}
child = child.nextSibling;
}
+ if (node.nodeType === 1) {
+ clone._scrollTop = node.scrollTop;
+ clone._scrollLeft = node.scrollLeft;
+ if (node.nodeName === "CANVAS") {
+ cloneCanvasContents(node, clone);
+ } else if (node.nodeName === "TEXTAREA" || node.nodeName === "SELECT") {
+ clone.value = node.value;
+ }
+ }
+
return clone;
}
+function initNode(node) {
+ if (node.nodeType === 1) {
+ node.scrollTop = node._scrollTop;
+ node.scrollLeft = node._scrollLeft;
-
-function isElementNode(node) {
- return node.nodeType === Node.ELEMENT_NODE;
+ var child = node.firstChild;
+ while(child) {
+ initNode(child);
+ child = child.nextSibling;
+ }
+ }
}
module.exports = function(ownerDocument, containerDocument, width, height, options, x ,y) {
- labelCanvasElements(ownerDocument);
- var documentElement = isIE9() ? cloneNodeIE9(ownerDocument.documentElement, options.javascriptEnabled) : ownerDocument.documentElement.cloneNode(true);
+ var documentElement = cloneNode(ownerDocument.documentElement, options.javascriptEnabled);
var container = containerDocument.createElement("iframe");
container.className = "html2canvas-container";
@@ -1637,16 +1615,13 @@ module.exports = function(ownerDocument, containerDocument, width, height, optio
return new Promise(function(resolve) {
var documentClone = container.contentWindow.document;
- cloneNodeValues(ownerDocument.documentElement, documentElement, "textarea");
- cloneNodeValues(ownerDocument.documentElement, documentElement, "select");
-
/* Chrome doesn't detect relative background-images assigned in inline