dom - Node.CloneNode() 不是函数 -dom-to-image.js

标签 dom dom-events webpage-screenshot dom-to-image

我想在 angularjs 中创建 HTML 页面的 .png 文件并下载它。为此,我当前使用 dom-to-image.js 并使用 domToImage.toBlob 函数并将节点元素传递给它。但在内部,当它转到 dom-to-image.js 时,它会抛出错误:

node.cloneNode() is not a function

有人可以在这里帮助我吗?

谢谢

最佳答案

当您尝试调用 cloneNode() 时,会出现此错误除了单个 DOM 节点之外的任何其他节点上。

在本例中,错误来自 dom-to-image库,它在内部调用该方法。

请注意,如果没有代码片段,则很难确定代码的精确问题,但重点是,当您调用 domtoimage.toBlob() 时,您需要提供单个 DOM 节点.

因此请仔细检查您所调用的内容。例如,如果您按class进行选择,则最终可能会得到多个元素。

最佳实践是精确确定要转换为 blob 的节点 - 使用 id 属性,如下所示:

domtoimage.toBlob(document.getElementById('element')).then(...)

其中 element 是目标节点的 id

您也可以选择 angular.element()甚至使用 jQuery直接。

在这两种情况下,都会返回一个Object——您不能在其上调用cloneNode()

另请注意 Angular 文档中 angular.element() 的以下内容:

Note: All element references in AngularJS are always wrapped with jQuery or jqLite (such as the element argument in a directive's compile / link function). They are never raw DOM references.

这意味着您在这两种情况下都会观察到相同的行为,例如这两个:

domtoimage.toBlob($('#element')).then(...)
domtoimage.toBlob(angular.element('#element')).then(...)

会导致您看到的错误。您可以在将 Object 提供给 domtoimage.toBlob() 之前对其进行索引,可能如下所示:

domtoimage.toBlob($('#element')[0]).then(...)
domtoimage.toBlob(angular.element('#element')[0]).then(...)

这也行。

另请查看this关于“cloneNode 不是函数”的帖子。

关于dom - Node.CloneNode() 不是函数 -dom-to-image.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60238179/

相关文章:

javascript - JavaScript 事件系统是否违反了 LSP?

javascript - 函数中的innerHTML(全局变量?)

java - Selenium 在 IE 中的截图

javascript - 两个 SVG 元素接触时的事件

javascript - 原型(prototype)事件 : Use Input Value From When Event is Created

node.js - 引用错误: Node is not defined (trying to use Node interface in typescript function in nodejs application)

javascript - html2canvas - iframe 没有屏幕截图

windows - 自动网页截图

javascript - node.removeChild 和 (c)=>node.removeChild(c) 有什么区别?

javascript - this.css( "color", "green"); (而不是 $(this))——它为什么有效?