Avatar billede tblaster Nybegynder
26. juli 2004 - 09:07 Der er 27 kommentarer og
1 løsning

Problemer med at printe en side som vises i en frame/iframe

Hejsa

Jeg skal have lidt hjælp til at lave en print knap der kan printe det der vises i en frame/iframe. Jeg har lavet følgende print knap:

<Center><a href="java script:window.print()"><img border="0" src="pics/Print.gif"></a></CENTER>

Trykker jeg på knappen så kommer print vinduet op og man kan vælge hvordan det skal printes. Trykker man så pint så kommer der et printikon frem nedest i exploereren men det er som om at printet aldrig overføres videre til selve printeren for det printes aldrig. Hvordan kan jeg så printe det? Jeg har prøvet med følgende muligheder men det giver samme resultat:

print()
self.print()
window.print()
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:13 #1
<a href="java script:window.FRAMENAVN.focus();window.print()">
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:14 #2
Jeg ville nok ha' brugt:

<center><a href="#" onclick="window.FRAMENAVN.focus();window.print()"><img border="0" src="pics/Print.gif"></a></center>
Avatar billede tblaster Nybegynder
26. juli 2004 - 09:22 #3
Min frame hedder Main men det giver:
'window.Main' is null or not an object

Problemet for mig er jo nok også at jeg i min frame har en iframe som hedder iframe. Men hvis jeg kalder den får jeg:
'window.iframe' is null or not an object

Følgende er min iframe
<iframe src='Request.asp?' name='iframe' id='iframe' allowTransparency='true' marginwidth='0' marginheight='0' width='100%' height='100%' scrolling='auto' frameborder='0'></iframe>
Avatar billede tblaster Nybegynder
26. juli 2004 - 09:25 #4
Jeg har lige prøvet med følgende hvor jeg får mit print vindu op men så kommer samme problem med at siden ikke printes som beskevet i start beskeden:

onclick="parent.iframe.focus();parent.iframe.print()"
onclick="parent.iframe.focus();window.print()"
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:25 #5
Med frame: parent.FRAMENAVN...
Med iframe: window.IFRAMENAVN..

Prøv at omdøbe iframen, til f.eks. ifrm.
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:26 #6
Hvis det er hele vinduet, kan du prøve: parent.window.print();
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:34 #7
Hvordan er din opsætning/layout?
Jeg mener placering af framen og iframen..
Avatar billede tblaster Nybegynder
26. juli 2004 - 09:35 #8
Det er ikke bare sådan lige at omdøbe da jeg bruger navnet mange steder. Jeg bruger den bla her hvor den virker:

parent.document.all.iframe

Jeg har derfor nu prøvet med føglende:
onclick="parent.document.all.iframe.focus();window.print()"

Det giver igen det print ikon i exploren.
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:37 #9
se 26/07-2004 09:34:43
Avatar billede tblaster Nybegynder
26. juli 2004 - 09:40 #10
jeg køre med et 3 delt design ... top, menu og main. I main har jeg så nogle gange en iframe og andre gange ikke. Det vil sige at jeg skal altså kunne printe ligemeget om teksten står i en iframe eller ej. Det er 2 forskellige steder i min kode man printer så koden kan være forskelligt men må godt være ens!
Avatar billede tblaster Nybegynder
26. juli 2004 - 09:42 #11
Til info så ligger print knappen altid på den side som skal printes altså i selve framen/iframen!
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:51 #12
hmm... underligt.. så burde det jo virke med "window.print()", idet vinduet får fokus, når man klikker i det..
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:52 #13
..bliver nød til at smutte.. er nok tilbage i løbet af 20-30 min..
Avatar billede tblaster Nybegynder
26. juli 2004 - 10:18 #14
Nu overføres mit print fra min main siden men den sender ikke kun min ene side til print men en del af mine frames. Her er hele mit frameset:

index.asp
_________
<FRAMESET border=0 frameSpacing=0 rows=*,1024,* frameBorder=0>
<FRAME src="Grundfarve.asp" name=Grundfarve noResize scrolling=no target="contents">

<FRAMESET border=0 frameSpacing=0 frameBorder=0 cols=*,<%= Session("Size") %>,0,*>
<FRAME src="Grundfarve.asp" name=Grundfarve noResize scrolling=no target="contents">

<FRAMESET border=0 frameSpacing=0 frameBorder=0 cols=147>


<FRAMESET border=0 frameSpacing=0 rows=384,0 frameBorder=0>
<FRAME border=0 name=index src="1.asp" noResize target="self">

</FRAMESET>
<FRAME src="Grundfarve.asp" name=Grundfarve noResize scrolling=no target="contents">
<FRAME src="Grundfarve.asp" name=Grundfarve noResize scrolling=no target="contents"></FRAMESET>
<FRAME src="Grundfarve.asp" name=Grundfarve noResize scrolling=no target="contents">

</FRAMESET>


________
1.asp
________
<FRAMESET border=false frameSpacing=0 rows=<%= Session("Str_Top") %>,* frameBorder=0>
<FRAME name=Top  src="Top.asp"  noResize scrolling=no target="Top">
<FRAMESET cols=<%= Session("Str_Menu") %>,*>
<FRAME name=Menu src="Menu.asp<% = Intern %>" noResize target="Menu">
<FRAME name=Main src="Main.asp<% = Intern %>" noResize target="_self">
</FRAMESET>
</FRAMESET>


_____________
Print knap på main:
_______________
Response.write "<Center><a href=""#"" onclick=""parent.Main.focus();parent.Main.print()""><img border=""0"" src=""pics/Print.gif""></a></CENTER><br><br>"


Når jeg trykker på print så sendes følgende til print:
Grundfarve.asp
Grundfarve.asp
Main.asp

Den sender altså 2x Grundfarve.asp til print hvilket den ikke skal. Hvad gør jeg forkert?

Min print i min iframe ser således ud:
Response.write "<Center><a href=""#"" onclick=""parent.document.all.iframe.focus();window.print()""><img border=""0"" src=""pics/Print.gif""></a></CENTER><br><br>"

Og den sender det samme til print
Avatar billede tblaster Nybegynder
26. juli 2004 - 10:32 #15
Jeg kan se at selvom den sender det til print så bliver det ikke printet ... jeg får bare en besked om at "This document failed to print"

Jeg bliver nok nødt til at lave det via et popup vindu. Kan man på en smart måde samle hele html koden fra en side, så når den er genereret og man trykker på en knap, så tager man hele html koden og gemmer den i en værdi som man så sender til en ny side?
Avatar billede thesurfer Nybegynder
26. juli 2004 - 10:38 #16
Ja, det kan man godt.. det hedder vist document.getElementByTag('body').outerHTML
Så skulle den vist fange indholdet.. det kan være at 'body' skal erstattes af 'html'.
Avatar billede thesurfer Nybegynder
26. juli 2004 - 11:03 #17
Et (modificeret) eksempel på outerHTML fra http://www.experts-exchange.com/Web/Web_Languages/JavaScript/Q_21009847.html:

<html>
<head>
<title>outer html test</title>

<script>

function showHTML(){
alert(document.body.innerHTML)
alert(document.body.outerHTML)


alert(document.getElementById('theDiv').innerHTML)
alert(document.getElementById('theDiv').outerHTML)

alert(document.getElementById('t1').innerHTML)
alert(document.getElementById('t1').outerHTML)

}
</script>

<body onload="showHTML()">
<p>sometext</p>
<p><input type="text" id="t1"> </p>
<div id="theDiv">
  <p>some more text </p>
</div>
</body>
</html>

Gem det i en html fil, og se hvordan det virker.
Avatar billede thesurfer Nybegynder
26. juli 2004 - 11:04 #18
En lille fejl.. glemte "</head>" i mellem "</script>" og "<body..>" ..
Avatar billede thesurfer Nybegynder
26. juli 2004 - 11:08 #19
Den hedder getElementsByTagName, men bruges vist til noget andet..
Avatar billede tblaster Nybegynder
26. juli 2004 - 11:31 #20
Hvordan kan jeg så lige få det overført til en ny side? Jeg kan jo ikke overføre det i linket som følgende:
Print.asp?Txt='+document.body.outerHTML+'

Kan jeg gemme det i en værdi eller skal jeg til at lave en form?
Avatar billede thesurfer Nybegynder
26. juli 2004 - 11:51 #21
En midlertidig test:

<html>
<head>
<title>outer html test</title>
<script type="text/JavaScript">
var printwin=window.open('#','printwin','');
printwin.document.write(document.body.outerHTML);
</script>
</head>

<body onload="//showHTML()">
<p>sometext</p>
<p><input type="text" id="t1"> </p>
<div id="theDiv">
  <p>some more text </p>
</div>
</body>
</html>


Jeg skal bare ha' fundet ud af, hvordan man implementerer en "print.asp?noget=andet"-løsning :-)
Avatar billede thesurfer Nybegynder
26. juli 2004 - 11:58 #22
Jeg tror jeg har en løsning..

Indsæt en form på din side, med 1 skjult felt:

<form name="frmprint" action="print.asp" target="winprint">
<textarea style="display: none" name="txtprint"></textarea>
</form>

og en funktion:

<script type="text/JavaScript">
function doprint()
{
document.frmprint.txtprint.value=document.body.outerHTML;
document.frmprint.submit();
}
</script>


Så skulle du gerne kunne bruge: <a href="#" onclick="doprint()">print siden</a>


På ASP siden:

<%
txt = request.form("txtprint")
txt = replace(txt, "<a href=""#"" onclick=""doprint()"">print siden</a>", "")
response.write txt
response.write "<script type='text/JavaScript'>window.print();window.close()</scipt>"
%>
Avatar billede thesurfer Nybegynder
26. juli 2004 - 12:00 #23
glemte at tilføje "return false" til onclick: onclick="doprint();return false;"
Avatar billede thesurfer Nybegynder
26. juli 2004 - 12:03 #24
hehe.. laver lige nogle rettelser :-)
Avatar billede tblaster Nybegynder
26. juli 2004 - 12:06 #25
jeg har fået det lavet ... thx for den store hjælp ... smid et svar som tak!
Avatar billede thesurfer Nybegynder
26. juli 2004 - 12:10 #26
Alletiders :-)
Avatar billede tblaster Nybegynder
26. juli 2004 - 12:21 #27
Endnu engang tak for hjælpen ... jeg smed lige 20 ekstra point i til dig!
Avatar billede thesurfer Nybegynder
26. juli 2004 - 13:10 #28
Takker for points :-)
(sad og spiste)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester