Avatar billede soerenlyn Nybegynder
19. oktober 2007 - 23:41 Der er 19 kommentarer og
1 løsning

Putte en onload på en popup

Hej Eksperter.

Jeg ønsker at åbne en popup, og sætte en onload på det. Fra man kalder at popup'en skal åbnes går der jo lidt tid før det sker, og derfor skal der udføres en handling når den er åbnet.
Hvordan gør jeg dette?
Jeg tænkte på noget i retningen af:

win=window.open(url);
win.onload=function(){alert("hej")}

Dog virker dette ikke.

Nogle forslag?
Avatar billede olebole Juniormester
20. oktober 2007 - 00:31 #1
<ole>

Hvis det skal virke cross-browser, skriver du sådan i dokumentet, du loader i popup'en:

window.onload = function(){
    opener.myFunction();
}

/mvh
</bole>
Avatar billede soerenlyn Nybegynder
20. oktober 2007 - 00:39 #2
Ja, det ved jeg godt :p
Undskyld jeg ikke har formuleret mig rigtigt.

Jeg vil ikke loade en bestemt side, men et billede..
Så onload'en skal sættes på fra opener.
Avatar billede olebole Juniormester
20. oktober 2007 - 02:00 #3
Det kan du ikke. Kan du ikke bare loade billedet i et 'HTML'-dokument (f.eks. med PHP eller ASP) - i popup'en?
Avatar billede roenving Novice
21. oktober 2007 - 05:48 #4
Tjah, man kan vel også bruge addEventListener/attachEvent på dokumentet i browseren (som jo automatisk wrappes om f.eks. et billede !-)
Avatar billede olebole Juniormester
21. oktober 2007 - 12:43 #5
roenving >> Nej, det tvivler jeg stærkt på. Mig bekendt wrappes der ikke noget dokument om et billede  :)
Avatar billede soerenlyn Nybegynder
21. oktober 2007 - 12:45 #6
Okay ... så den eneste løsning er at lave et lille asp-dokument der så indeholder en onload på sin body? :(
Avatar billede olebole Juniormester
21. oktober 2007 - 12:47 #7
roenving >> My bad! Lidt javascript i adresselinjen afslører, at det faktisk sker alligevel  ;o)

Til gengæld kan du ikke nå at konstruere en event-handler, som bliver kaldt, når først du har kaldt window.open  :o|
Avatar billede olebole Juniormester
21. oktober 2007 - 12:48 #8
soerenlyn >> Ja, jeg tror det ... med mindre roenving kan komme op med et af sine guldkorn  :)
Avatar billede jgivoni Nybegynder
21. oktober 2007 - 20:43 #9
Strengt taget kunne man vel også bare lade javascript skrive den html til det nye window.document i stedet for at bede om en asp/php side, der gør det. Det vil nok være en anelse hurtigere.
Avatar billede w13 Novice
21. oktober 2007 - 20:45 #10
Men så er problemet jo, at man stadig skal vente på, at vinduet er klar, går jeg ud fra? :) Samme problem, som Soerenlyn havde med sin onload.
Avatar billede soerenlyn Nybegynder
21. oktober 2007 - 20:48 #11
vel ikke hvis man skriver en onload ind i html'en ? Hvordan åbner jeg en siden med window.open, så jeg skriver i js ?
Avatar billede jgivoni Nybegynder
21. oktober 2007 - 21:12 #12
Jeg kan ikke lige huske hvordan man gør, men der skal åbnes et nyt window uden at en url loades, - derefter skal man skrive koden til et simpelt html-dokument, der bare indeholder ét billede. Og så er det vel på selve billedet der skal en onload event på, så der sker noget når billedet rent faktisk er loaded, eller hvad?
Avatar billede soerenlyn Nybegynder
21. oktober 2007 - 21:13 #13
Nej .. for så skal man stadig "vente" på at det nye window er loadet før man kan putte html ind i det ..
Avatar billede olebole Juniormester
21. oktober 2007 - 21:18 #14
Metoden write på dokument-objektet er på vej ud, men sålænge der er tale om alm. HTML 4.01, kan den stadig bruges ... og så kan man godt skrive HTML ind i vinduet.

Man kan også bare loade dette PHP-dokument med:
    window.open("myPhpDoc.php?pic=sti/til/billede.jpg", "win", "... ... ...");

---------- snip ----------
<?
$fName = end( explode("/", $_GET["pic"]) );
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Billede: <?=$fName?></title>
    <meta http-equiv="imagetoolbar" content="no">
    <meta http-equiv="imagetoolbar" content="false">
<style type="text/css">
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
}
img {
    margin: 0 auto;
}
</style>
<script type="text/JavaScript">
window.onload = function() {
    parent.popLoad();
}
</script>
</head>
<body>

<img src="<?=$_GET["pic"]?>">

</body>
</html>
---------- /snip ----------
Avatar billede soerenlyn Nybegynder
21. oktober 2007 - 21:20 #15
Men kan man ikke skrive den side som skal loades _før_ man åbner vinduet? For ellers kommer problemet med at vente på at vinduet er åbnet ..

Jeg vil nemlig helst undgå at have en side liggende som skal åbnes ..
Avatar billede olebole Juniormester
21. oktober 2007 - 21:39 #16
Du kan prøve noget à la dette - men jeg er ikke 100% sikker på, vinduet åbner sig hurtigt nok:

var sPath = "sti/til/billede.jpg";
var sFname = "billede.jpg";

var sHtml = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Billede: '+sFname+'</title><meta http-equiv="imagetoolbar" content="no"><meta http-equiv="imagetoolbar" content="false"><style type="text/css">html, body {height: 100%;margin: 0;padding: 0}img {margin: 0 auto}</style></head><body><img src="'+sPath+'"></body></html>';

var oWin = window.open("", "win", "... ... ... ...");
oWin.document.open("text/html", "replace");
oWin.document.write(sHtml);
oWin.document.close();
Avatar billede soerenlyn Nybegynder
21. oktober 2007 - 21:41 #17
Nej det er også det jeg er bange for. Hvis man nu sidder på en meget langsom computer, så vil der jo gå lidt tid før vinduet er åbent..
Avatar billede jgivoni Nybegynder
21. oktober 2007 - 22:55 #18
I min erfaring vil det som olebole foreslår til sidst virke uden problemer.

Hvis du vil teste det kan du jo bare indsætte en stor flashfil på siden og åbne den i Firefox. Det svarer meget godt til at simulere en meget langsom computer ;-)

Noget helt andet er at hvis du er så bange for at vinduet ikke åbner hurtigt nok (og det er da et reelt problem) hvorfor så ikke prøve en løsning, der åbner billedet i en popup eller ramme i det eksisterende vindue? Måske skal vi vide lidt mere om hvad intentionen med det hele er for at finde en rigtig god løsning.
Avatar billede soerenlyn Nybegynder
21. oktober 2007 - 23:00 #19
Jeg har et galleri og så vil jeg gerne have et 's' skal være genvej til "SaveAs".. man kan bruge execommand("SaveAs"), men gemmer en hel side, så det er nødvendigt at åbne billedet i popup for sig selv (tror jeg), og derefter gemme.. Man kan bare først køre execommand når vinduet er åbnet selvfølgelig, og dette kan variere ...
Avatar billede soerenlyn Nybegynder
04. december 2007 - 15:41 #20
Lukker then.
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