Avatar billede lerchedahl Nybegynder
06. december 2001 - 13:42 Der er 9 kommentarer og
1 løsning

udprint og opdater gennem frames

Hej eksperter.

jeg har følgende to problemer:

1.
Jeg har en knap i en frame som skal udprinte indholdet i en anden frame. Til det bruger jeg følgende script:

<script language=\"JavaScript\">
function doPrint() {
window.top.frameNavn.focus();
window.print();
}
</script>

Mit problem indtræffer idet jeg, i min frame med navnet \'frameNavn\', loader et andet frameset ind. Når jeg så prøver at udskrive det, sker der ingenting. Det er jo nok fordi at det er [frameNavn] der har focus og hverken frame1 eller frame2 i det nyligt loadede frameset. Hvordan fikser jeg det, således at hele det nye frameset printes, som om det var direkte indsat i [frameNavn] ?

2.
En anden knap i en frame skal opdatere indholdet i en anden frame. De fungerer upåklageligt sådan her:

onClick=\"top.frameNavn.location.href = top.frameNavn.location.href;\"

Problemet er, at hvis jeg i [frameNavn] loader et ekstern dokument ind* får jeg at \'der er opstået en fejl på siden\' i statusbaren, og der opdateres ikke. Hvordan løser jeg det problem?

På forhånd tak
Lerchedahl

*<a href=\"http://www.eksperten.dk\" target=\"frameNavn\">

Avatar billede jumper Nybegynder
06. december 2001 - 13:44 #1
1.

function doPrint(){
  top.frameNavn.focus();
  top.frameNavn.print();
}

2.

top.frameNavn.location.reload();

/Thor
Avatar billede jakoba Nybegynder
06. december 2001 - 14:02 #2
Desværre du er løbet ind i \'same origin\' reglen der siger at javscript i en side fra eet domæne ikke må pille i javascript i en anden side der kommer fra et andet domæne.

reglen er der for at beskytte fx formularer i en side der bør være sikker. Det vil jo ikke være ret sikkert hvis jeg kan lokke dig til at loade din \"Log mig ind på banken\" side i mit frameset og jeg så fra en anden ramme kunne holde øje med hvad du tastede ind som brugernavn og password.

og som sedvanligt går det så også lidt ud over de uskyldige at man sætter et hegn op for at holde slemmerterne ud.

Når siden i den ramme kommer fra et andet domæne kan du ikke kalde den onfocus() funktion der ligge i rammen.

mvh JakobA
Avatar billede lerchedahl Nybegynder
06. december 2001 - 15:36 #3
jumper >> ingen af dine løsninger virker...

jakoba >> Det er fair nok, det med banken :-P Det vil altså sige at når jeg nu *har* loaded et eksternt dokument ind i mit frameset, at jeg så ikke er i stand til at opdatere den pågældende frame? De lyder nemlig ikke helt logisk i mine ører, da det stort set er det samme at loade filen ind, som at opdatere den...

Det er sikkert mig der er et spejl, men jeg synes ikke rigtig jeg fik svar på hvordan jeg printer mit frameset ud...

Kan jeg slet ikke kommunikere over frames på den måde jeg ønsker, af sikkerhedsmæsige årsager?

/lerchedahl
Avatar billede jakoba Nybegynder
06. december 2001 - 15:49 #4
Hvis det er dig der ejer begge sider kan du skaffe dig et scurity-certifikat og på den måde få lov til at snakke imellem de forskellige domæner.

uden det kan du hverken kalde funktionen  .focus()  eller funktionen  .reload(true)  i den fremmede side.

du kan udskifte den fremmede side med en anden med et link
<a href=\'nyside.html\' target=\'rammenavn\'>klik</a>
og vistnok (usikker her) med java script:
    parent.rammenavn.src = \'nyside.html\';
jeg kan huske jeg fik det til at virke engang, men ikke hvordan :(

sorry.
Avatar billede jakoba Nybegynder
06. december 2001 - 15:50 #5
Ups.  scurity  ->  security
Avatar billede lerchedahl Nybegynder
06. december 2001 - 16:03 #6
hmm, det var lidt besværligere end jeg havde håbet på...

Det giver jo ikke nogen mening at dette skulle være \'ulovligt\' :

top.frameNavn.location.href = top.frameNavn.location.href

Jeg kan tilfældigvis heller ikke kalde funktionen .print() vel?

/lerchedahl
Avatar billede jakoba Nybegynder
06. december 2001 - 16:15 #7
ikke den version af print() der ligger i den fremmede side.

du er et menneske, så du kan se at linien:
      top.frameNavn.location.href = top.frameNavn.location.href;
ikke ændrer nogetsomhelst.
Men du prøvede den alligevel, for du ved jo at computere er dumme som snot og gør hvad der bliver sagt uanset hvor tåbeligt det er. Det er også derfor browseren er \'mere restriktiv\' end egentlig nødvendigt (for en sikkerheds skyld).

mvh JakobA
Avatar billede lerchedahl Nybegynder
07. december 2001 - 09:20 #8
Ok, det lyder fornuftigt nok... Lige et sidste spørgsmål, så får du dine point.

Da jeg ikke kan opdatere eller udskrive de eksterne sider, kunne jeg godt tænke mig at løse det på den måde, at samtlige eksterne links åbnes i et nyt browservindue, men *kun* eksterne dokumenter. Jeg skal vel lave noget GetElementByTagNAme kombineret med noget target, men jeg er ikke så god til at skrue den slags sammen.

Scriptet skal kun gælde i en enkelt frame og jeg gider ikke sætte det ind på samtlige dokumenter som loades ind i netop dén. Derfor, hvis scriptet kan ligge i en anden frame end den, som det skal gælde for, ville det være rart...

/lerchedahl
Avatar billede jakoba Nybegynder
24. april 2002 - 23:57 #9
Ups. nogen gange er auto-mails ikke for pålidelige. Jeg missede sidste del.

i head:

<script type='text/javascript'> <!--

function fixLinks() {
    var migSelv = self.location.host;
    var lks = document.links;
    for (var i=0; lks.length>i; i++) {
        if ( lks[i].host != migSelv ) {
            lks[i].target="_blank";
        }
    }
}; //end fixLinks()

// --> </script>

og tilføj et kald til fixLinks i onload
<body ... onload="fixlinks()">

ikke 100%. en hurtig bruger kan nå at klikke før siden er loaded færdig

tak for pts :-)

mvh JakobA
Avatar billede jakoba Nybegynder
24. april 2002 - 23:58 #10
Ups igen.  stort L i fixLinks (i onload)
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