[JS] window.print() een iframe

Pagina: 1
Acties:

  • Glaanie
  • Registratie: Juni 2002
  • Laatst online: 06:18

Glaanie

Medewerker Product Content

All your spec are belong to us

Topicstarter
Ik heb de volgende code:

HTML:
code:
1
2
3
<!-- zwikkie niet relevante code -->
<div id="route" style="display:none; overflow: auto; width: 0px; height: 0px;"></div>
<!-- nog een lap niet relevante code -->


Javascript:
code:
1
2
3
4
5
function printRoute(){
  document.getElementById('route').style.display = '';
  document.getElementById('route').innerHTML = "<iframe src='route.php' id='route_print'></iframe>";
  document.getElementById('route_print').focus();
}


Zoals je kunt zien, maakt de functie printRoute() binnen de tags van de div met het id='route', iframe tags aan, die weer een ander bestand bevatten, die ik speciaal voor printdoeleinden heb gemaakt (zonder overbodige menus ed.). In dat bestand route.php bevindt zich een window.print() opdracht, welke keurig tussen <script> tags bevindt. (De window.print() opdracht is getest en goed bevonden, daar deze zich tot op heden in een popup bevond).
Alles op een rijtje zettend, moet de code eerst de hidden div zichtbaar maken (beetje redundant, daar deze niet zichtbaar is gezien de hoogte en breedte van 0, maar dat maakt voor nu niet veel uit), de iframe ertussen proppen, deze focussen en dan moet de window.print() functie welke zich in het iframe geladen bestand bevindt de iframe uitprinten. Theoretisch moet het goed gaan en ook mijn grote vriend Mozilla Firefox 1.5 heeft er geen bezwaar tegen, die print keurig de iframe uit en niets meer. Alleen, mijn niet zo grote vriend Internet Explorer 6.0 SP2 op Windows XP (alle updates zijn binnen etc) vindt het niet zo'n goed plan, er gebeurt namelijk helemaal niets. Ik heb de hoogte en breedte van de div tijdelijk groter gemaakt en toen kon ik zien dat de iframe wel geladen wordt, alleen de window.print() functie in het bestand route.php wordt genegeerd. Ik zie geen javascript errors, er gebeurt gewoon helemaal niets. Maar het vreemde is, zodra ik de pagina refresh met een druk op de knop F5 van mijn toetsenbord, komt er wel een 'Afdrukken' schermpje naar voren. Maar dit is niet het bestand route.php wat'ie wilt uitprinten, hij wilt de pagina waar het iframe instaat afdrukken en dat is nou net niet de bedoeling.

Wat heb ik geprobeerd:
1) In Javascript, document.getElementById('route_print').print(); toegevoegd, maar deze doet niets, genereert een js error ('is not a function') in de Webdeveloper toolbar in Firefox.
2) De div ipv een 0 waarde voor de hoogte en breedte op iets van 50 px hoog en breed gezet, zodat ik echt wat zag. Dit heeft echter ook geen effect.

Ik weet niet echt wat ik anders kan doen. Op Google heb ik weinig zinnigs gevonden (daar vond ik de in 1) geprobeerde 'oplossing') en op GoT vond ik mogelijke oplossingen dit of geen zin hadden of niet werkten.

Verwijderd

Ik zie twee dingen die je kan proberen:

style.display op "block" zetten ipv "" misschien dat IE er dan anders mee omgaat.

En als IE de print opdracht wel krijgt na F5, waarom dan niet de iframe herladen via
javascript: window.location.reload()

ik hoop dat je hier wat aan hebt.

  • Glaanie
  • Registratie: Juni 2002
  • Laatst online: 06:18

Glaanie

Medewerker Product Content

All your spec are belong to us

Topicstarter
op block zetten heeft geen effect helaas. Zoals ik al aangaf in mijn openingspost, krijgt IE wel een printopdracht na een F5, maar dan print'ie de parent pagina uit, niet de iframe, terwijl het juist de bedoeling is dat hij alleen de iframe print.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Is het een optie om je print() in je source te stoppen (neem aan dat die PHP van jou is). Print anders eens met een setTimeout.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Weet je zeker dat IE dat kan, alleen een iframe uitprinten ipv de hele pagina?
Op de msdn website kan ik er niets over vinden.

Een workaround zou kunnen zijn om een print style aan te maken in CSS waarin je alle ander objecten op display=none zet.

  • André
  • Registratie: Maart 2002
  • Laatst online: 15-04 09:54

André

Analytics dude

BtM909 schreef op maandag 19 december 2005 @ 21:17:
Is het een optie om je print() in je source te stoppen (neem aan dat die PHP van jou is). Print anders eens met een setTimeout.
Die print() staat volgens mij in de source als ik het goed lees. En als je vanuit de parent na de focus dan een print geeft?

code:
1
window["naamvaniframe"].print();

  • Glaanie
  • Registratie: Juni 2002
  • Laatst online: 06:18

Glaanie

Medewerker Product Content

All your spec are belong to us

Topicstarter
BtM909: Ja, de window.print() functie staat nu in de source van route.php (die dus in de iframe staat), dat werkt dus prima in FF, maar niet in IE.

André: Nee, dat werkt niet (ik heb het in de printRoute() functie gestopt, op de laatste regel, deze wordt
geladen en gebruikt in de parent frame). Sterker nog, in FF krijg ik nu een melding dat de inhoud van het document is gewijzigd en dat er niet geprint kan worden. IE zwijgt nog steeds in alle talen...

ACAB: Ik hoop het wel! Een print-style is een goed idee. Dat kan toch met media="print" in de aanroep naar het print.css (of whatever je het noemt) stijlblad? Ik heb het nog nooit zo gedaan, maar ik zoek het wel op. Bedankt voor de tip!

Verwijderd

voorbeeldje:

in de stylesheet
@media print {
.noprint {display:none;}
}

in de andere objecten in de pagina voeg je gewoon class="noprint toe.

[ Voor 15% gewijzigd door Verwijderd op 19-12-2005 23:34 ]

Pagina: 1