window.print() black belt

Vine un client si vrea un print preview pentru o pagina, dar nu vrea toata pagina ci doar o bucata.
Tu esti lenes si n-ai chef sa te apuci sa faci un raport frumos, cu export, etc. Pur si simplu vrei un html chior sa fie deschis intr-un popup si mai departe print.
Evident ca IE implementeaza altfel povestea asta…
Logic, scriptul JS ar fi cam asta:

var wnd = document.open();
wnd.document.write(“your shit”);
wnd.print();
 

Ei bine nu… pe interneti lumea zice ca ar fi ceva cu securitatea in browser, ca sa nu te apuci sa faci magarii. Altii zic ca pe IE, scriptul trebuie sa fie:

var wnd = document.open();
wnd.document.write(superContent);
window.print();
 

Nici asa nu merge. M-am apucat sa injectez javascript in wnd.document.write() si sa execut cod pe body.onload.
Firefox, Chrome merg. IE nu. Dar stati ca nu e tot: daca se pune pe onload() un alert mic, ala se executa. doar window.print() nu.
Mai mult decit atit, daca acel superContent e salvat pe disc si apoi deshis cu IE, print-ul se executa. doar din window.open() nu.

Dupa lungi cautari am gasit:

var myWindow = window.open(”, ”, ‘width=200,height=100’);
myWindow.document.write(allcontent);
myWindow.document.close();
myWindow.focus();
myWindow.print();
myWindow.close();
 

Nu ma intrebati de ce, dar merge. Practic popup-ul se executa ca un ahem… popup, nu in alt tab ca pina acum.
Welcome to the Twilight zone.

Leave a Reply

Your email address will not be published. Required fields are marked *