首页 > 解决方案 > 从 promise.js 接收错误 - 使用 Javascript 和 html2canvas 在 IE11 中克隆 HTML 对象

问题描述

更新 - 抱歉

我正在开发 DC.js 仪表板,并且正在尝试提供屏幕截图功能。目前,我开发了一个名为 DIV id 的按钮,其中包含所有图表,并将 SVG 转换为 Canvas,以便我可以使用 HTML2Canvas 进行屏幕截图。尽管在此过程中,我必须为图表提供内联样式才能使其正常工作,因此我必须创建一个不会在现有页面上进行更改的克隆对象。当我单击该按钮时,我在开发人员工具的控制台页面上收到此错误。错误是..

"Possible Unhandled Promise Rejection: TypeError: Unable to get property 'removeAttribute' of undefined or null reference."

我必须在 IE11 上工作,所以由于限制,这有点挑战性。我确实实现了 promise.js,因为 IE11 不支持 promise 功能。

例子:

<div id="masterContainer"> 
    ... 'all the html, svg, etc. elements  to create the charts'
</div>

在 Javascript 中,我有一个调用 masterContainer 的按钮并执行它的过程。

function screenshot() {
  var getContainer = $('#masterContainer');  
  var cloneObject = getContainer.clone();  -- I want to clone this div object along with the elements inside it.

  elementsToCanvas(cloneObject);  -- This is a function where it takes that html object and convert all the svgs, ect. to canvas. Also takes the cloneObject and apply it to html2canvas;
}

我只想为该 masterContainer 创建一个克隆对象,而不对现有页面进行更改...虽然它可以在不克隆对象的情况下工作,但在现有页面上进行了更改。请帮忙。

标签: javascripthtmlexceptionclonehtml2canvas

解决方案


目前尚不清楚您在这里问什么,但element.cloneNode在 ie 11 中受支持。但是要克隆它的所有子项,您需要提供一个可选参数,true,只需确保您不会意外将其添加到 DOM 并最终得到重复的 ID。

function screenshot() {
  var clone = document.getElementById("masterContainer").cloneNode(true);

  elementsToCanvas(clone);
}

更新:根据您粘贴的异常,在我看来这与克隆无关,但Promises 在 ie11 上不受支持。考虑使用条件polyfill


推荐阅读