J'imprime des parties sélectionnées de pages en les plaçant dans un iframe vide. Tout va bien, sauf le CSS. Parfois il est là, parfois non, donc je suppose que la fonction d'impression est chargée dans la plupart des cas avant que le CSS soit complet. Malheureusement, je ne suis pas en mesure de résoudre le problème. Le code de base :
var pStyles = new String ("<link href="stackoverflow.com/css/print.css' rel='stylesheet' type='text/css' id='cssprint' />");
var pWrapIn = new String ("<main><article><section>");
var pWrapOut = new String ("</section></article></main>");
function printFrame(fId) {
window.frames["printhelper"].document.body.innerHTML = pStyles + pWrapIn + document.getElementById(fId).innerHTML + pWrapOut;
console.log(window.frames["printhelper"].document.body.innerHTML);
window.frames["printhelper"].window.focus();
window.frames["printhelper"].window.print();
}
Cela fonctionne, mais avec le problème CSS décrit. Pour être sûr que le CSS est chargé, j'ai fini par utiliser la fonction modifiée, qui ne fonctionne pas du tout :
function printFrame(fId) {
window.frames["printhelper"].document.body.innerHTML = pStyles + pWrapIn + document.getElementById(fId).innerHTML + pWrapOut;
console.log(window.frames["printhelper"].document.body.innerHTML);
$(#cssprint).on('load', function() {
console.log ('CSS loaded');
window.frames["printhelper"].window.focus();
window.frames["printhelper"].window.print();
}, 0);
}