我试图让它在过去的两天里工作,浏览了我遇到的关于这个问题的每篇文章,但我似乎无法在Safari中使它工作。代码在Firefox和Chrome中完美运行,但是当我在Safari中测试时,它总是令我失望。我正在尝试执行以下操作:
for (var j = 0; j < total_reports; j++) {
var svgString = $(elem_graph).find('svg');
$(svgString)[0].setAttribute('width','2500');
$(svgString)[0].setAttribute('height','500');
$(svgString)[0].setAttribute('viewBox', '0 0 1000 200');
$(svgString)[0].setAttribute('preserveAspectRatio', 'none');
$(elem_graph).find("span").html();
var img = new Image();
var DOMURL = self.URL || self.webkitURL || self;
var svg = new Blob([svgString], {type: "image/svg+xml;charset=utf-8"});
var url = DOMURL.createObjectURL(svg);
var svgString = $(elem_graph).find('svg');
$(svgString)[0].setAttribute('width','2500');
$(svgString)[0].setAttribute('height','500');
$(svgString)[0].setAttribute('viewBox', '0 0 1000 200');
$(svgString)[0].setAttribute('preserveAspectRatio', 'none');
svgString=$(elem_graph).find("span").html();
var DOMURL = self.URL || self.webkitURL || self;
var svg = new Blob([svgString], {type: "image/svg+xml;charset=utf-8"});
var url = DOMURL.createObjectURL(svg);
img.onload = (function(img) {
return function() {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var png = canvas.toDataURL("image/png");
pdf.addImage(png, 'PNG', 10, 120, 485, 270);
pdf.addPage();
DOMURL.revokeObjectURL(png);
pdf.save("test.pdf");
img_load_counter++;
canvas = null;
ctx = null;
png = null;
}
})(img);
img.src = url;
svgString = null;
svg=null;
unformatSvgString = null;
url=null;
}
它工作正常,直到它达到“img.onload =(function(img)”它只是没有为img注册load事件。我也尝试了addEventListener()但它似乎也没有工作。
此外,闭包,“canvas = null; ctx = null; png = null;“似乎根本不释放任何内存,也欢迎任何解决方案。
答案 0 :(得分:0)
也许为时已晚,但我希望它对其他人有帮助。 您可以更改:
var DOMURL = self.URL || self.webkitURL || self;
var svg = new Blob([svgString], {type: "image/svg+xml;charset=utf-8"});
var url = DOMURL.createObjectURL(svg);
具有:
url = "data:image/svg+xml;charset=utf-8," + encodeURIComponent( svgString );