Сбой изображения appendChild dataURI в window.open в IE

Я пытаюсь получить изображение с интерактивной карты, используя dataURI. Затем это изображение добавляется к новому макету окна для печати.

Это работает в Firefox и Chrome, но не в IE11 или Edge, которые выдают ошибки. IE: «HierarchyRequestError» Edge: «Такой интерфейс не поддерживается»

Этот вопрос очень похож, но на него нет ответа, и предлагаемые решения касаются к объектам, отличным от данных изображения.

Я подозреваю, что этот метод может работать, но я не могу' не могу понять, как правильно реализовать это для URI.

Текущий код работает в FF и Chrome;

function screen(){

var simg = new Image();
var dataURL = map.getCanvas('#map').toDataURL();

simg.src = dataURL;

var mywindow = window.open('about:blank','Print','height=800,width=900');
var is_chrome = Boolean(mywindow.chrome);

mywindow.document.write('<!DOCTYPE html><head>');
mywindow.document.write('<link rel="stylesheet" href="./css/scr.css" type="text/css" />');
mywindow.document.write('</head><body>'); 
//add logos and legend here.
mywindow.document.write('</div></body></html>');
mywindow.document.body.appendChild(simg);

        if (is_chrome) {
            setTimeout(function () { 
                    mywindow.document.close();
                    mywindow.focus(); 
                    mywindow.print();  
                    mywindow.close();
            }, 600);
        } else {

    mywindow.document.close(); 
    mywindow.focus(); 
    mywindow.print();
    mywindow.close();       

    }
    return true;    
}

person benj    schedule 08.04.2016    source источник


Ответы (1)


Это было решено путем установки тела innerHTML с использованием внешнего HTML изображения, как было предложено здесь.

    try{
    mywindow.document.body.appendChild(simg);
    }
    catch(e){
    if (simg.outerHTML) {
    mywindow.document.body.innerHTML = simg.outerHTML;
    }
    else {
    //console.log('not working');
    }
    }
person benj    schedule 26.04.2016