Avatar billede lubker Nybegynder
03. september 2007 - 16:36 Der er 10 kommentarer og
1 løsning

window.open() virker kun een gang

Hej jeg bruger følgende funktion til at åbne et popupvindue:

<script>
function popup(url){
    popup =  window.open(url, '','center:yes, width=700,height=600,scrollbars=yes');
    popup.focus();
}
</script>

Desværre virker denne funktion kun første gang der klikkes på et link. Lukkes popupvinduet og main-vinduet ikke reloades vises fejlen:

"Modtageren (serveren [ikke serverprogrammet]) er ikke tilgængelig og forsvandt; alle forbindelser er ugyldige. Kaldet er ikke udført."
Hvad skyldes dette? og hvordan løses det?
Avatar billede olebole Juniormester
03. september 2007 - 16:52 #1
<ole>

Det skyldes, at du kalder funktionen det samme, som variablen i den - og at du ikke erklærer variablen med 'var':

<script type="text/javascript">
function popup(url){
    var popup = window.open(url, '','width=700,height=600,scrollbars=yes');
    popup.focus();
}
</script>

- og så har jeg også fjernet dit center-halløj. Det kan man ikke i en window.open  :)

/mvh
</bole>
Avatar billede olebole Juniormester
03. september 2007 - 16:58 #2
- og årsagen er, at JavaScript ikke kan kende forskel på funktionen og variablen. Når du bruger 'var', tilhører variablen det lokale scope (inde i funktionen).
Bruger du ikke 'var' tilhører variablen det globale scope (der, hvor funktionen ligger) - og så ligger funktionen ikke længere i det globale scopes 'popup'. Dér ligger i stedet det nyåbnede vindue  :)

Du kan i øvrigt centrere popup'en sådan:

<script type="text/javascript">
function popup(url){
    var w = 700;
    var h = 600;
    var L = (screen.availWidth-w)/2;
    var T = (screen.availHeight-h)/2;
    var popup = window.open(url, '','width='+w+',height='+h+',left='+L+',top='+T+',scrollbars=yes');
    popup.focus();
}
</script>
Avatar billede lubker Nybegynder
03. september 2007 - 17:01 #3
Tak for hjælpen. Det er da også en ren tanketorsk ikke at erklære variablen.

Men med hensyn til centreringen forstår jeg ikke helt hvorfor det ikke kan benyttes ved window.open. Det virker da glimrende.

Lægger du et svar.
Avatar billede olebole Juniormester
03. september 2007 - 17:05 #4
Nej, det gør det helt sikkert ikke i nogen kendt browser  :)
Avatar billede olebole Juniormester
03. september 2007 - 17:08 #5
- og så kan der i øvrigt slet ikke være kolon i tredie argument i window.open - kun lighedstegn. Desuden må der ikke være mellemrum mellem de enkelte properties i tredie argument (center:yes, width=).
Det sidste er ikke dokumenteret noget sted, men giver erfaringsmæssigt meget ofte fejl  :)
Avatar billede lubker Nybegynder
03. september 2007 - 17:08 #6
Kun testet i ie og mozilla, og der fungerer det perfekt. Og da 95% af mine brugere benytter ie. Har jeg valgt at benytte centreringen alligevel...
Avatar billede lubker Nybegynder
03. september 2007 - 17:09 #7
OK. Godt der er nogle der har mere styr på javascrit end mig...
Avatar billede olebole Juniormester
03. september 2007 - 17:10 #8
Læg hovedvinduet helt oppe i venstre hjørne. Så er jeg 230% sikker på, centreringen ikke virker. Og tak for points i øvrigt  ;o)
Avatar billede olebole Juniormester
03. september 2007 - 17:17 #9
Du får lige et link til MS' version:
    http://msdn2.microsoft.com/en-us/library/ms536651.aspx

Vær dog opmærksom på, at da window-objektet faktisk ikke hører til under selve JavaScript - og dermed f.eks. heller ikke window.open, location og alert - kan der være forskel på metoderne fra browser til browser.

Således er der forskel på, hvilke properties du kan bruge i tredie argument i window.open. Fullscreen virker f.eks. kun i IE
Avatar billede olebole Juniormester
03. september 2007 - 17:18 #10
ups ... tak for points  ;o)
Avatar billede lubker Nybegynder
03. september 2007 - 17:34 #11
Tak for det, kan se der lige er lidt småting der skal ændres både her og andre stedder... :-)
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