Javascript image.onload()或image.addEventListener()在Safari中不工作,有解决方案吗?

Javascript image.onload()或image.addEventListener()在Safari中不工作,有解决方案吗?,javascript,jquery,safari,closures,onload-event,Javascript,Jquery,Safari,Closures,Onload Event,在过去的两天里,我一直在努力让它发挥作用,浏览了我遇到的关于这个问题的每一篇文章,但我似乎无法让它在Safari中发挥作用。这段代码在Firefox和Chrome中运行完美,但当我在Safari中测试它时,它总是让我失望。我正在努力做到以下几点: for (var j = 0; j < total_reports; j++) { var svgString = $(elem_graph).find('svg'); $(svgString)[0].setAtt

在过去的两天里,我一直在努力让它发挥作用,浏览了我遇到的关于这个问题的每一篇文章,但我似乎无法让它在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;
    }
for(var j=0;j
它工作正常,直到达到“img.onload=(function(img)”,它只是不为img注册加载事件

此外,闭包“canvas=null; ctx=null;
png=null;“似乎根本没有释放任何内存,也欢迎任何解决方案。

可能太晚了,但我希望它对其他人有帮助。 您可以更改:

    var DOMURL = self.URL || self.webkitURL || self;
    var svg = new Blob([svgString], {type: "image/svg+xml;charset=utf-8"});
    var url = DOMURL.createObjectURL(svg);
与:


你有没有检查过这个,不完全是。我检查过safari是否支持canvas,但我只是忘了检查onload()事件是否支持canvas。我刚刚检查过它,但我的版本似乎不支持它。有什么解决方法可以让它工作吗?
url = "data:image/svg+xml;charset=utf-8," + encodeURIComponent( svgString );