ugrás a tartalomhoz

(i)Frame nyomtatás

tiku I tikaszvince · 2006. Okt. 11. (Sze), 13.33
Sziasztok!

Létezik crossbrowser megoldás a következő problémára?
Van egy lapom, amin van egy iframe és egy gomb. A gombra kattintva JS-el feltöltöm a keretet tartalommal, és szeretném kinyomtatni azt. Csak az iframe tartalmát.
  1. function printR(r) {  
  2.   var rf = document.getElementById('rframe');  
  3.   doc = rf.contentDocument;  
  4.   if (doc == undefined || doc == null) {  
  5.     doc = rf.contentWindow.document;  
  6.   }  
  7.   doc.open();  
  8.   doc.write("<html><head><title>rf</title><link rel=\"stylesheet\" type=\"text/css\" href=\"print.css\"></head><body>"+  
  9. // kb 20 sor HTML kód  
  10. "</body></html>");  
  11.   doc.close();  
  12.   rf.contentWindow.focus();  
  13.   rf.contentWindow.print();  
  14. }  
Ezzel csak annyi bajom van, hogy Opera csak a teljes dokumentumot hajlandó nyomtatóra küldeni, kerettel, gombbal, soksokhejehujával...

Azok a megoldások melyek a frame+print kulcsszavakra elődugják orrukat a keresőből vagy csak Explorerben, vagy csak Firefoxban produkálják az általam várt működést.

Létezik valakinek erre bejáratott megoldása? Rosszul kerestem, vagy csak az Operához más dialektusban kell beszélnem?

köszi
tikuVoltam
 
1

print media?

Anonymous · 2006. Okt. 11. (Sze), 16.09
Es ha css-el ugyeskednel a nyomtatasi kephez az nem megoldas?

Amit betoltesz iframe-be html-t, azt style sheet-ezed.
2

sajna nem

tiku I tikaszvince · 2006. Okt. 12. (Cs), 09.54
Lehet félreérthető voltam. Én már eleve egy CSS-el megformázott dokumentumot szeretnék kinyomtatni. Azt a dokumentumot, ami az iframe-ben megjelent. Ez csak precízen elhelyezett szövegeket tartalmaz.
Az Opera, a részdokumentum helyett az iframe-et tartalmazó ("fő")dokumentumot nyomtatja.

Bár most adtál egy ötletet. Kipróbálom és elmesélem mire jutottam.
3

egy igazán ronda megoldás

tiku I tikaszvince · 2006. Okt. 12. (Cs), 11.40
mivel, nem találtam sem magyarázatot, sem megoldást a problémámra, egy igazán rettenetes megoldást szültem.
  1. function printR(r) {  
  2.   var rf = document.getElementById('rframe');  
  3.   doc = rf.contentDocument;  
  4.   if (doc == undefined || doc == null) {  
  5.     doc = rf.contentWindow.document;  
  6.   }  
  7.   doc.open();  
  8.   doc.write("<html><head><title>rf</title><link rel=\"stylesheet\" type=\"text/css\" href=\"print.css\"></head><body>"+  
  9. // kb 20 sor HTML kód  
  10. "</body></html>");  
  11.   doc.close();  
  12.   if (navigator.appName=='Opera') {  
  13.     elements = document.body.getElementsByTagName("*");  
  14.     for (i=0; element = elements[i]; i++) {  
  15.       if (element.nodeName=='IFRAME' && element.id == 'rframe') {  
  16.         element.style.width = '95mm';  
  17.         element.style.height = '185mm';  
  18.       }  
  19.       else {  
  20.         element.oldDisplay = element.style.display;  
  21.         element.style.display = 'none';  
  22.       }  
  23.     }  
  24.     rf.contentWindow.focus();  
  25.     rf.contentWindow.print();  
  26.     for (i=0; element = elements[i]; i++) {  
  27.       if (element.nodeName=='IFRAME' && element.id == 'receptframe') {  
  28.         element.style.width = '0px';  
  29.         element.style.height = '0px';  
  30.       }  
  31.       else {  
  32.         element.style.display = element.oldDisplay;  
  33.       }  
  34.     }  
  35.   }  
  36.   else {  
  37.     rf.contentWindow.focus();  
  38.     rf.contentWindow.print();  
  39.   }  
  40. }  
Kicsit bizonytalanul írom le, de arra jutottam, hogy az Operában nem működik a focus() metódus. Ez elképzelhető?

Míg ezt írtam, kipróbáltam egy másik módszert is, ami CSS media típusokkal mahinál (köszi Anonymus az ötletet).
  1. <style type="text/css" media="screen">  
  2. iframe#rframe {  
  3. width0height0margin0bordernone;  
  4. }  
  5. </style>  
  6. <style type="text/css" media="print">  
  7. body * { displaynone; }  
  8. iframe#rframe {  
  9.   displayblock;  
  10.   width92mm;  
  11.   height185mm;  
  12.   bordernone;  
  13. }  
  14. </style>  
Ezt a módszert viszont az Explorer nem szereti, ugyanis csak egy üres keretet nyomtat ki.

Gondolkozom még tovább igy kicsit, hátha sikerült a két megoldásból valami használhatót és elegánsat kihozni. De azért ha valakinek van megoldása kérem ne tarsa magában :) Köszi.

tikuVoltam
4

no JS, only CSS

tiku I tikaszvince · 2006. Okt. 12. (Cs), 12.27
Megvan a megoldás. A fentebb említett CSS módszer, csak annyival kell kiegészítenem, hogy az iframe-ben használt CSS-ben kell egy
  1. html, body { displaystatic; }  
szabályt betenni.

Mégegyszer köszönet a kezdő ötletért Anonymus

tikuVoltam