Avatar billede benneharli Juniormester
10. maj 2007 - 21:24 Der er 36 kommentarer og
1 løsning

Udføre funktion ved "page load", og igen "on change"

Jeg har en funktion der kører når siden loader, men funktionen henter en variabel fra et objekt, der først har den rigtige værdi efter ca 5 sekunder.

Er der en måde hvor man kan sige:

function cameraName() {
    var name = frame.CameraName;
   
    :again
   
    if (name == frame.CameraName) {
    goto again; } else {
    self.document.getElementById('title').innerText = frame.CameraName;
    }
}

--- eller noget i den stil?
}
Avatar billede roenving Novice
10. maj 2007 - 23:03 #1
Du kan teste på, at f.eks. framen findes og variablen CameraName har en værdi, og hvis ikke, så prøv igen om lidt, f.eks.

function cameraName() {
    if(myFrame && frame.CameraName)
      document.getElementById('title').appendChild(document.createTextNode(myFrame.CameraName));
    else setTimeout("cameraName()",500);//tester hvert ½ sekund
}

-- innerText er ganske uheldig, hvis du skal bruge det på indernettet, da den ikke understøttes af så mange browsere !-)

-- og da jeg ikke har en anelse om, hvordan din ting ser ud, har jeg taget udgangspunkt i, at det er element, der kan indeholde en tekstnode, men ikke gør det fra start !-)

-- og jeg har set myFrame som en variabel, er det ikke det, skal den frst findes frem, et html-element er det kun i browsere, der understøtter document.all, altså to ...
Avatar billede benneharli Juniormester
10. maj 2007 - 23:28 #2
vil det virke her?
<p align="center"><font face="Arial" color="#808080" size="5" id="title"><b>Getting Camera Name...</b></font></p>
Avatar billede roenving Novice
10. maj 2007 - 23:34 #3
Sådan burde det virke:

<p style="text-align:center;font-family:arial,sans-serif;color:#808080;font-size:large;font-weight:bold;" id="title">Getting Camera Name...</p>

function cameraName() {
    if(myFrame && myFrame.CameraName)
      document.getElementById('title').firstChild.nndeValue = myFrame.CameraName;
    else setTimeout("cameraName()",500);//tester hvert ½ sekund
}

-- men stadig, hvad er 'frame', som du bruger ?-)
Avatar billede benneharli Juniormester
10. maj 2007 - 23:45 #4
kæft mand, den er lidt spejet den her ;-)

først. sådan her ser min funktion ud:
---------------------------------------------------------
function cameraName() {
    var name =  self.document.getElementById('frame').CameraName;
   
    while (name == self.document.getElementById('frame').CameraName) {
        name = self.document.getElementById('frame').CameraName;
    }
        document.getElementById('title').firstChild.nndeValue = frame.CameraName;
}

--------------------------------------------------------------
derefter
--------------------------------------------------------------

<p align="center"><font face="Arial" color="#808080" size="5" id="title"><b>Getting Camera Name...</b></font></p>

---------------------------------------------------------
min frame er et object der streamer live video fra USA... Hvis du vil se det, så gå ind på http://www.roswall.com/remoteweb - skal lige sige det kun virker i IE... Kan ikke få det til i firefox... der er problemer med objectet
Avatar billede roenving Novice
10. maj 2007 - 23:46 #5
I øvrigt er den kode, du viser, forældet fra og med marts 1998, så hvis den er skrevet i dette årtusind, burde pågældende have skridt-prygl 3 gange daglig med en våd Søndags - Berlinger !-)
Avatar billede roenving Novice
10. maj 2007 - 23:48 #6
Nå, rolig nu, roenving, der er jo selvfølgelig nogle, der har skrevet kode med tåbelige værktøjer som Visual Studio 2003 eller FrontPage langt ind i dette årtusind, og de kan jo ikke gøre for, at de værkstøjer ikke ved det første om web-kodning anno 2000, men stadig skriver kode, som om det var skrevet i 1995 !o]
Avatar billede benneharli Juniormester
10. maj 2007 - 23:51 #7
mit store problem nu, er at første gang man går in på siden, er "self.document.getElementById('frame').CameraName" standard værdi (i dette tilfælde "Camera 1") der efter at have fået kontakt til videoen, ændrer sig til kameranavnet - men næste gang man går ind uden at have lukket browseren, husker browseren åbenbart det rigtige navn, og så går min løkke jo helt amok, eftersom at navnet aldrig mere ændrer sig.. Giver det mening, eller er det helt sort?
Avatar billede benneharli Juniormester
10. maj 2007 - 23:57 #8
hehe... selve "streamingen" er noget jeg har overtaget, og lige nu er jeg bare ved at fintune det og lave SQL login... det andet må komme senere...
Avatar billede roenving Novice
10. maj 2007 - 23:59 #9
Bemærk, at jeg tester tingene _før_ jeg prøver at tildele værdier, og det skal du i hvert fald gøre !-)

-- tjah, internet-ting, der kræver, at jeg installerer programmer, kan aldrig nogensinde være interessante nok, til at jeg vil udsætte hverken min egen, hvis jeg havde nogen, eller denne computer for sådan en risiko ...

-- så det ser ud til, at jeg ikke kan hjælpe dig videre !o]
Avatar billede benneharli Juniormester
11. maj 2007 - 00:04 #10
;-)
hehe... ja, der skal desværre installeres en dll før lortet virker... den "atacker" en CLSID...
Avatar billede benneharli Juniormester
11. maj 2007 - 00:05 #11
har du nogen idéer til hvordan man kan løse det med løkken?
Avatar billede roenving Novice
11. maj 2007 - 00:16 #12
Ja, måske ...

-- hvis du kigger på logikken i mit eksempel, så tester jeg, om der findes noget, der hedder 'frame', og hvis der gør, så om der findes en værdi i CameraName ...

-- hvis begge er rigtige, så sættes indholdet af kameranavnet, hvis ikke prøver jeg igen efter ½ sekund, så hvis der kan hives en værdi ud, checker den ikke mere !-)

Så dette kunne være det:

function cameraName() {
    if(fr = self.document.getElementById('frame') && fr.CameraName)
        document.getElementById('title').firstChild.nndeValue = fr.CameraName;
    }else setTimeout("cameraName()",500);
}
Avatar billede roenving Novice
11. maj 2007 - 00:18 #13
Hvorfor bruger du i øvrigt ikke en ting, som de fleste har installeret, Windows Media Player, QuickTime, Flash Player e.l., som så kan henvise til et autoriseret websted ?-)
Avatar billede benneharli Juniormester
11. maj 2007 - 00:28 #14
det sidste først: det er et firma der hedder Integral Technologies www.integraltech.com - og de kan kun streame med et ActiveX object... så man skal altså registrere filen først...

Jeg paster lige koden... måske du kan se om der kunne være andre måder at gøre det på?
Avatar billede benneharli Juniormester
11. maj 2007 - 00:28 #15
<OBJECT id="frame" codeBase="<?PHP echo $rvctl; ?>" height="100%"
                        width="100%" classid="CLSID:6781FF2E-7452-11D4-84D4-0040F60CE591" align="middle">
                        <PARAM NAME="PlayControlID" VALUE="">
                        <PARAM NAME="SearchResultsControlID" VALUE="">
                        <PARAM NAME="TextCameraID" VALUE="">
                        <PARAM NAME="TextDateID" VALUE="">
                        <PARAM NAME="TextFrameCountID" VALUE="">
                        <PARAM NAME="TextFrameID" VALUE="">
                        <PARAM NAME="TextTimeID" VALUE="">
                        <PARAM NAME="Username" VALUE="<?PHP echo $dvruser; ?>">
                        <PARAM NAME="EPassword" VALUE="<?PHP echo $epassword; ?>">
                        <PARAM NAME="Server" VALUE="<?PHP echo $dvr; ?>">
                        <PARAM NAME="Camera" VALUE="<?PHP echo $cam1; ?>">
                        <PARAM NAME="ScaleLevel" VALUE="1">
                        <PARAM NAME="Brightness" VALUE="0">
                        <PARAM NAME="Contrast" VALUE="32">
                        <PARAM NAME="AutoRun" VALUE="1">
                        <PARAM NAME="FrameInfoOnly" VALUE="0">
                        <PARAM NAME="LiveVideoThrottle" VALUE="0">
                        <PARAM NAME="ShowVideo" VALUE="1">
                        <PARAM NAME="Invert" VALUE="0">
                        <PARAM NAME="GetTimesWithSearch" VALUE="0">
                        <PARAM NAME="BackColor" VALUE="0">
                        <PARAM NAME="Zoom" VALUE="100">
                        <PARAM NAME="Port" VALUE="18772">
                        <PARAM NAME="MaxPlayDelay" VALUE="0">
                        <PARAM NAME="PlaybackFrameRate" VALUE="33">
                        <PARAM NAME="MaxPlaybackFrameRate" VALUE="22">
                        <PARAM NAME="MinPlaybackFrameRate" VALUE="1000">
                    </OBJECT>
Avatar billede benneharli Juniormester
11. maj 2007 - 00:48 #16
1: der vil altid findes noget der hedder "frame"
2: der vil altid findes noget der hedder "CameraName" i objektet "frame"

den er som sagt lidt spejet... jeg tror jeg bliver nød til at lave:

name == frame.CameraName || frame.CameraName == "Camera 1"
Avatar billede roenving Novice
11. maj 2007 - 00:49 #17
*lol*

Koden havde jeg zq læst, de amatør-tricks, der er brugt på siden til at forhindre almindelige brugere i at læse siden, er fuldstændige unyttige, da almindelige brugere alligevel ikke ønsker at læse koden (de frygter det jo nærmest !-) og bare interesserede amatører eller semi-professionelle selvfølgelig kender metoder ...

-- her brugte jeg bare Opera !o]
Avatar billede benneharli Juniormester
11. maj 2007 - 00:54 #18
eller bare:
if (frame.CameraName == "Camera 1") {
Avatar billede mclemens Nybegynder
11. maj 2007 - 09:27 #19
Jeg er her ikke, men ville bare lige sige at
jeg tror, at nndeValue skal være nodeValue
Avatar billede roenving Novice
11. maj 2007 - 11:38 #20
Nej, Clemme, jeg synes heller ikke jeg kan se dig !-)

-- og det mclemens hentyder til, er dette, hvor der er en tavetosse:

function cameraName() {
    if(fr = self.document.getElementById('frame') && fr.CameraName)
        document.getElementById('title').firstChild.nodeValue = fr.CameraName;
    }else setTimeout("cameraName()",500);
}
Avatar billede benneharli Juniormester
11. maj 2007 - 17:27 #21
det med noden fandt jeg ud af... google er great ;-)

derudover har jeg renset lidt ud i koden nu... smider den i naeste kommentar, hvor jeg ogsaa smider den funktion(er) jeg har lavet nu... Kunne ikke faa det til med firstChild.nodeValue fordi der staar noget i forvejen... Er sikker paa at saadan et par hajer kan muge yderligere ud i den ;-)

Og saa lige - hvis jeg laver den saadanher, faar jeg en besked om at fr ikke er defineret...
fr = self.document.getElementById('frame')
Avatar billede benneharli Juniormester
11. maj 2007 - 17:29 #22
<script type="text/javascript">

function cameraName() {
    if(self.document.getElementById('frame') && self.document.getElementById('frame').CameraName) {
        var compare = self.document.getElementById('frame').CameraName;
        set(compare);
    } else setTimeout("cameraName()",50);
}

function set(check) {
    var frame = self.document.getElementById('frame').CameraName;
    var cameraTitle = self.document.getElementById('cameraTitle');
   
    if ((frame != check)) {
        cameraTitle.removeChild(cameraTitle.lastChild);
        cameraTitle.appendChild(document.createTextNode(frame));
    } else setTimeout("set('"+check+"')",500);
}

</script>

<style type="text/css">
    BODY {
        text-align: center;
        font-family: sans-serif;
        font-size: 25;
        color: #808080;
    }
</style>

</head>

<body bgcolor="#F4F4FD" background="../images/body.gif" onLoad="MM_preloadImages('../images/buttons/full_down.gif'); cameraName()">
<br>
<p id="cameraTitle">Getting Camera Name...</p>
Avatar billede benneharli Juniormester
11. maj 2007 - 17:31 #23
-> roenving

og saa uanset hvad, smid lige et svar ;-)
Avatar billede mclemens Nybegynder
11. maj 2007 - 18:51 #24
"Og saa lige - hvis jeg laver den saadanher, faar jeg en besked om at fr ikke er defineret...
fr = self.document.getElementById('frame')"

Prøv med dobbelt parenteser...
if((fr=document.getElementById('frame'))&&(fr.CameraName)){

... Det der self. er der vel ingen grund til eller ?
Avatar billede mclemens Nybegynder
11. maj 2007 - 18:56 #25
Umiddelbart ved jeg intet om objects og ikke hvorfor
din firstChild.nodeValue ikke ville lege med, men nu
jeg alligevel spammer - hvad siger den til denne her:

<script type="text/javascript">

var fr,cameraTitle;
function cameraName() {
  if((fr=document.getElementById('frame'))&&(fr.CameraName)){
    cameraTitle=document.getElementById('cameraTitle').firstChild;
    set(cameraTitle.nodeValue);
  }else setTimeout("cameraName()",50);
}

function set(check) {
  if (fr.CameraName!=check)cameraTitle.nodeValue=fr.CameraName;
  else setTimeout("set('"+check+"')",500);
}

</script>
Avatar billede mclemens Nybegynder
11. maj 2007 - 19:01 #26
Hvis ovenstående ikke virker kan din
nuværende kode vel skrives som:

<script type="text/javascript">

var fr,compare,cameraTitle;

function cameraName() {
    if((fr=document.getElementById('frame')) && (compare=fr.CameraName)) {
        cameraTitle = document.getElementById('cameraTitle');
        set();
    } else setTimeout("cameraName()",50);
}

function set() {
    if (fr.CameraName != compare) {
        cameraTitle.removeChild(cameraTitle.lastChild);
        cameraTitle.appendChild(document.createTextNode(fr.CameraName));
    } else setTimeout("set()",500);
}

</script>
Avatar billede mclemens Nybegynder
11. maj 2007 - 19:44 #27
Apropo forkortelser, måske er dette kortere:

<script type="text/javascript">

var fr,x=false;
function cameraName() {
  if((fr=document.getElementById('frame'))&&(fr.CameraName)&&(x&&x!=fr.CameraName))
    document.getElementById('cameraTitle').firstChild.nodeValue=fr.CameraName;
  else {
    if(!x&&fr.CameraName)x=fr.CameraName;
    setTimeout("cameraName()",500);
  }
}

</script>
Avatar billede benneharli Juniormester
11. maj 2007 - 20:53 #28
Den sidste ser lækker ud, men der er problemet bare lige at jeg ikke kan følge med :-$

--> roenving
du har ikke en lille kommentar til objects? - og så skal jeg for øvrigt hilse fra brormand (MrMox). I er vist rendt ind i hinanden til hardwarekast...
Avatar billede benneharli Juniormester
11. maj 2007 - 20:54 #29
og smid et svar...
Avatar billede roenving Novice
12. maj 2007 - 22:28 #30
À propos ...

-- de dobbelte paranteser er i overskud, men til gengæld er de indre paranteser i 11/05-2007 18:51:36 også med til at generere fejl:

  if(fr=document.getElementById('frame')&&fr.CameraName){

Objects har altid været et problem, da Netscape var ude med en måde at gøre den slags på et tidspunkt, hvor M$ knap nok havde tænkt på indernettet, og det de havde tænkt på, lå tæt på deres slagplan for windows (som lige var blevet v3.1 !-)

Senere lykkedes det at få w3c til at hive fat i sagen, og der blev det M$, der fik fat i den længste ende, så embed-tagget blev deprecated og Mozilla-folket måtte finde en måde, der ikke var helt tåbelig ift. Gecko-maskinen ...

-- og du må meget gerne hilse Mr. Mox tilbage, det var egentlig en meget hyggelig dag (og aften -- og nat !-), der lige udenfor lands lov og ret i det nordligste Jylland og bl.a. i selskab med en flaske røg og uld importeret fra nogle skotske øer !o]
Avatar billede mclemens Nybegynder
12. maj 2007 - 22:48 #31
Du glemte svaret Roenving.
Avatar billede roenving Novice
13. maj 2007 - 00:01 #32
Mig ?-)

Har vi da fundet en løsning ?o]
Avatar billede mclemens Nybegynder
13. maj 2007 - 00:27 #33
Umiddelbart er løsningen vel 11/05-2007 17:29:37.
Iflg. 11/05-2007 17:31:44 & 20:54:38
skulle du vel ligge et svar ?-)
Avatar billede benneharli Juniormester
13. maj 2007 - 00:38 #34
kæft mand... har lige fundet ud af at alt det her sådan set er fuldstændig lige meget... hvis jeg smider følgende i objektet:

<PARAM NAME="TextCameraID" VALUE="CameraTxt">

og så smider det her i titlet

<p style="font-size:x-large;" id="CameraTxt">%s</p>

så går resten af sig selv... kendte ikke %s tagget... og ved faktisk stadig ikke hvad det er ;-)

ja roenving, smid et svar... både for at komme væk fra "innertext", og for funktionen med FØRST at tjekke om tingene eksisterer, FØR man begynder at bruge dem til noget...

men som sagt... fuldstændig unødigt - men så har man da lært noget ;-)
Avatar billede roenving Novice
13. maj 2007 - 01:26 #35
Umiddelbart ligner %s jo en kommadolinje-parameter, ligesom man bruger det i DOS eller Windows, og det kunne godt ligne, at det har en sammenhæng ...

-- vørker det også i forskellige brusere ?-)

-- els velbekomme '-)

-- i øvrigt træls, at E* kun sender mails ud en gang hver time ,-(
Avatar billede benneharli Juniormester
13. maj 2007 - 01:35 #36
takker - har set mig nødsaget til at krybe til korset, og sige at det kun kommer til at virke i IE. Har snakket med USA, og de siger at deres ting KUN bliver udviklet til Bill drengen, så det kan sagtens være at deres COM objekt ikke kan lide FF eller andre...

skidt? jo da :-(

så du kendte heller ik' %s ? det er da altid en trøst ;-)

tak for hjælpen
Avatar billede roenving Novice
13. maj 2007 - 01:47 #37
Tjoh, såvidt jeg ved, har Gecko-folket brugt rigtig mange kræfter på at få tingene til at virke, sådan at også windows-ting dur, men der jo selvfølgelig en grænse (hvilket jeg netop antydede i 12/05-2007 22:28:14 !-)

-- og jeg takker for point ;~}
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