Avatar billede zerrvox Nybegynder
24. november 2004 - 17:01 Der er 15 kommentarer og
1 løsning

Automatisk redirect ved ingen musebevægelser i frames

Jeg er ved at lave et slideshow, som skal køre på en computer på en messe. Slideshowet viser e billeder af brugte campingvogne, hvis nogen skulle være interesseret i at vide mere om den pågældende vogn klikker du på billedet.

Den sider, som dukker op herefter, er lavet med to frames, hvoraf den ene er hentet direkte fra nettet, og den anden indeholder nogle ekstra informationer. Her er det så mit problem opstår. Jeg skal have lavet et javascript, der registrer al musebevægelse i begge frames, sådan at hvis en forbi passerende efterlader computeren, så skifter siden selv tilbage til slideshowet efter omkring 20 sekunder.

Da jeg ikke selv er nogen haj til javascript, fandt jeg et script, der gjorde netop dette på her på eksperten, problemet er bare, at når jeg skal have dette script til at fange musebevægelserne fra den frame, som hentes fra nettet, og hvor jeg ikke har mulighed for at redigere i koden, så kommer jeg til kort. Her er mit kendskab til javascript simpelthen ikke stort nok.

Jeg ville dog mene, at det skulle være muligt at lave, da jeg har mulighed for at rette i filen med framset'et, som burde have adgang til at oprette en sådan trigger i fram'et.

Selve slideshowet kan ses her: http://www.in-forma.dk/pjbrugt/index.php

hvis man klikker på et af billederne, vil I kunne se den omtalte side. Jeg håber, at der er nogen, som kan hjælpe mig, eller i hvert fald fortælle mig, om det er muligt.

På forhånd tak.
Avatar billede olebole Juniormester
24. november 2004 - 17:23 #1
<ole>

Hvis dit frameset ligger på PC'en og dokumentet ligger på nettet, kan du ikke scripte ind i det. Det ville være cross-domain scripting - og det er ikke tilladt med JavaScript.

/mvh
</bole>
Avatar billede olebole Juniormester
24. november 2004 - 17:38 #2
Prøv dog denne her og kald den '.hta' i stedet for '.html' - hvilket gør den til en 'HyperText Application':

<html>
<head>
function bla() {
    frames[1].document.onmousemove = function() {
        alert("move")
    }
}
</script>
</head>
<frameset rows="50%,50%">
    <frame src="about:blank">
    <frame src="http://www.google.dk" onload="bla()">
</frameset>
</html>

En HTA er en special-instans af IE, som har andre sikkerheds forbehold. Den anses som værende et safe-area (hvad det så end er under Windows ... hehe) og cross-domain scripting, m.m. er tilladt.

Du kan læse mere om HTA'er, der kan skræddersyes med eget ikon o.m.a. her:
  http://msdn.microsoft.com/library/default.asp?url=/workshop/author/hta/hta_node_entry.asp

Det kunne oven i købet være attraktivt messe-sammenhæng, hvis software'en ser specialfremstillet ud - og ikke bare ligner en browser  :)
Avatar billede olebole Juniormester
24. november 2004 - 17:41 #3
Ooops ... der forsvandt lige et script-start tag. Det kan du nok selv sætte ind  :)
Skal du have fat i selve event'en fra frame'en, kan du gøre sådan:

<html>
<head>
<script type="text/javascript">
function bla() {
    frames[1].document.onmousemove = function() {
        alert(frames[1].event.clientX)
    }
}
</script>
</head>
<frameset rows="50%,50%">
    <frame src="about:blank">
    <frame src="http://www.google.dk" onload="bla()">
</frameset>
</html>
Avatar billede olebole Juniormester
24. november 2004 - 17:42 #4
"OBS: NU MED SCRIPT-TAGS!"  ;D
Avatar billede zerrvox Nybegynder
24. november 2004 - 22:09 #5
Tak, det ser spændende ud, det vil jeg straks give mig i kast med. Dog har jeg allerede en lige hage ved det, jeg er afhængig af nogle php sider, er der evt. en måde at erklære denne tilstand til ie uden at have fil endelsen hta, ellers må jeg se, om jeg ikke kan udskifte funktionen med noget javascript.

Kan jo lige spørge med det samme, er det muligt at hente en get variabel via javascript, eller selvføli er det muligt, men du kunne måske hjælpe mig lidt. :D

Fordi jeg skal bare hente en link variabel, som er stored i url'en (get) og sætte denne på linket i min frame, derfor er det en ret essentiel ting ved siden/scriptet.
Avatar billede olebole Juniormester
24. november 2004 - 22:30 #6
Jaja ... det er ikke noget problem med variablen, men lad os lige tage én ting ad gangen - og begynde med HTA'en  ;o)

Min mening var at lægge en HTA-fil på PC'en på udstillingen. I denne fil lægger du et frameset, der importerer henholdsvis lokale filer og filer fra serveren. Hvad de importerede filer hedder 'til efternavn', er uden betydning ... den eneste fil, der skal være en HTA, er frameset-filen. De importerede filer kan hedde '.html', '.php', '.asp' eller '.hr_ibbermands_egen_fine_filendelse', hvis bare de kan læses af en almindelig browser  :)

Giv lige en melding på den først
Avatar billede zerrvox Nybegynder
25. november 2004 - 15:24 #7
hehe.. Det er så bare i orden.. Sætter stor pris på din hjælp.. :D

Den opfanger stadig ikke musebevægelserne rigtigt fra frames'ne, men da jeg har oplevet at den kan aktiveres i den hentede side, så går jeg ud fra, at den del, at det virker. Men da jeg som sagt ikke er ret skrap til javascript, kan det lige så godt være mit kald til frames'ne der er forkert, faktisk har jeg på fornemmelsen, at det er der fejlen ligger, da jeg kan se, at IE finder fejl under processen, fejlen kan ses her: http://www.socfc.dk/jesper/jserror.gif og det er jo netop kaldet til en af frames'ne, så hvis du lige vil kigge på min kode, kan du måske se, hvad der er galt.

Fil: details.hta

<html>
<head>
<HTA:APPLICATION ID="oMyApp"
    APPLICATIONNAME="Slideshow"
    BORDER="none"
    CAPTION="no"
    ICON=""
    SHOWINTASKBAR="no"
    NAVIGABLE = "yes"
    SINGLEINSTANCE="yes"
    SYSMENU="no"
    CONTEXTMENU = "no"
    SCROLL = "auto"
    WINDOWSTATE="maximize">

<script language="JavaScript"><!--
if (document.layers) {
  window.captureEvents(Event.MOUSEMOVE);
  frames[0].document.captureEvents(Event.MOUSEMOVE);
  frames[1].document.captureEvents(Event.MOUSEMOVE);
}

window.onMouseMove = resetTimer;
frames[0].document.onmousemove = resetTimer;
frames[1].document.onmousemove = resetTimer;

var debugging = false;
var tID = '';

function resetTimer(e) {
  if (debugging) debugging = confirm('here');
  clearTimeout(tID); // reset the timer
  tID = setTimeout('executeTimer()',5000);
}

function executeTimer() {
  location.href = 'index.php';
}
//--></script>
</head>

<frameset cols="650, *" border="0">
  <frame APPLICATION="yes" style="padding: 10px;" src="http://www.campingvogne.dk/presentation.asp?entityGuid=176044&siteGuid=331" onMouseMove="resetTimer()">
  <frame APPLICATION="yes" src="info.php" onMouseMove="resetTimer()">
  <noframes>
    <p>Din browser understøtter ikke frames</p>
  </noframes>
</frameset>

</html>
Avatar billede olebole Juniormester
25. november 2004 - 15:43 #8
Det er fordi, du prøver at klistre mouse-events på de to dokumenter, inden frameset'et er tegnet i browseren - og dokumenterne er derfor heller ikke loaded på det tidspunkt  ;o)

<html>
<head>
<HTA:APPLICATION ID="oMyApp"
    APPLICATIONNAME="Slideshow"
    BORDER="none"
    CAPTION="no"
    ICON=""
    SHOWINTASKBAR="no"
    NAVIGABLE = "yes"
    SINGLEINSTANCE="yes"
    SYSMENU="no"
    CONTEXTMENU = "no"
    SCROLL = "auto"
    WINDOWSTATE="maximize">

<script language="JavaScript">
var debugging = false;
var tID = null;

function initMouseEvents() {
    frames[0].document.onmousemove = resetTimer;
    frames[1].document.onmousemove = resetTimer;
}

function resetTimer(e) {
  if (debugging) debugging = confirm('here');
  clearTimeout(tID); // reset the timer
  tID = setTimeout('executeTimer()',5000);
}

function executeTimer() {
  location.href = 'index.php';
}
</script>
</head>

<frameset cols="650, *" border="0" onload="initMouseEvents()">
  <frame APPLICATION="yes" style="padding: 10px;" src="http://www.campingvogne.dk/presentation.asp?entityGuid=176044&siteGuid=331">
  <frame APPLICATION="yes" src="info.php">
  <noframes>
    <p>Din browser understøtter ikke frames</p>
  </noframes>
</frameset>

</html>

Som du ser har jeg slettet dine 'document.layers' ting. De er kun til ære for Netscape4.X - og da HTA'en er en IE, kan de aldrig komme på tale i denne sammenhæng.
Avatar billede zerrvox Nybegynder
25. november 2004 - 22:38 #9
Det virker som en drøm nu, helt sådan som jeg ønskede det, så er der vist kun tilbage at hente den variabel, da det er en ret væsentlig del af systemet, da den jo skal hente den relevante side for angående campingvognen..
Avatar billede zerrvox Nybegynder
25. november 2004 - 22:42 #10
eller rent faktisk har jeg endnu et problem.

kan det lade sig gøre at flytte musen hen et bestemt sted, når en side åbnes, fordi hvis siden skifter tilbage til slideshowet, og musen står over selve slideshowet stopper det med at køre.


Du må undskylde alle de ting, men som sagt har aldrig rigtig programmeret i javascript, så er virkelig glad for din hjælp, og du må da vist snart have fortjent nogle flere point + plus en karma vurdering. :D
Avatar billede olebole Juniormester
25. november 2004 - 23:49 #11
Hehe ... det går zq nok. Jeg hjælper jo, fordi det er sjovt - og fordi jeg selv fik en masse hjælp i sin tid, da jeg startede  ;o)

Lad os lige tage den lette først ... get-variablen:
Lad os sige URI'en ser sådan ud: "side.php?bla=noget", så kan du skrive:

var myVar, loc = unescape(location.href);
if (loc.indexOf("?")!=-1) {
    loc = loc.split("?")[1];
    myVar = loc.split("=");
    if (myVar[0]=="bla") alert("myVar: " + myVar[1]);
}

'location.href' returnerer hele URI'en (URL plus query-streng)
'unescape' svarer til 'urldecode' i PHP
'split' svarer til 'explode'

Jeg er ikke helt med på, hvorfor dit slideshow stopper, når cursoren står over det. Det må vi prøve at løse, for man kan ikke flytte på cursoren med JavaScript ... og Gud være lovet for det!  ;D
Desværre (i dette tilfælde) hjælper de ændrede sikkerhedsforhold i en HTA ikke på det. Prøv at beskrive problemet. Havde du det også, før filen blev lagt frameset'et og der blev klistret event-listeners på dokumenterne? Læg evt. koden til dit slideshow.
Avatar billede olebole Juniormester
25. november 2004 - 23:50 #12
Nåja ... med 'indexOf' tester vi ligesom med 'strstr', om der er et '?' :)
Avatar billede zerrvox Nybegynder
26. november 2004 - 00:32 #13
Grunden til at slideshowet stopper er, at brugeren skal have mulighed for at se nærmere på et billede eller klikke på det, så slideshowet stopper, når man holder musen over et af billederne i det. Derfor hvis siden skifter til slideshowet og musen står lige hen over det, så vil slideshowt stoppe. Har ikke fået sat det sidste kodestykke du har posten ind endnu, men gør det i morgen, så snart jeg har tid. Jeg tror faktisk, at det med slideshowet stopper er sidste problem, der skal løses inden jeg er færdig med det. Er det evt. et andet work around for det problem?
Avatar billede olebole Juniormester
27. november 2004 - 17:56 #14
Sorry ... har lige været fraværende et par dage. Umiddelbart har jeg ikke løsningen på problemet. Det ville nok kræve, jeg var lidt mere inde i projektet og koderne  :)
Kommer jeg i tanker om en løsning, smider jeg den naturligvis  ;o)
/mvh
Avatar billede zerrvox Nybegynder
28. november 2004 - 20:43 #15
Det hele virker nu, bortset fra den lille detalje jeg snakkede om sidst, men jeg tror jeg har fundet en løsning. Hvad hvis man sætter en variabel fx mouseTouched = false, og når musen så bliver flyttet ændres denne til true. Herefter er det vel bare at indsætte et ekstra tjek i slideshowet, der hvor den tjekker om musen står over billedet, hvor den tjekker om denne værdi er true or false.

Jeg vil først lige se om, jeg selv kan sætte dette op, men ellers bliver jeg nok nødt til og høre om, du vil hjælpe mig med dette, eller sige på forhånd, at dette ikke kan lade sig gøre. :D
Avatar billede zerrvox Nybegynder
19. marts 2005 - 17:18 #16
fik det til at virke :P

Det er dog længe siden, så lukker tråden, hvis du ville have haft point så smid en kommentar, så opretter jeg en tråd med point til dig.. :D
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