Avatar billede froggy51 Nybegynder
03. april 2005 - 22:48 Der er 16 kommentarer

Tilretning af JavaScript så det også virker i Mozilla og Netscape

Er der nogen, der kan hjælpe med at få fluen til at flyve i andre brovsere end lige "kun" IE?
Originalscriptet ligger på:
http://javascript.internet.com/miscellaneous/fly.html

Jeg har ændret lidt - og fået den til ikke at flimre med scrollbars'ne (som den gør i originalen) - men jeg kan ikke få liv i "dyret" i Mozilla, Netscape m.fl.

Håber på hjælp, da jeg gerne vil bruge den på en hjemmeside om insekter, hvor den jo borset fra dens manglende flyveevne i andre browsere ville være helt perfekt.

Mine ændringer kan ses (nydes i IE) med tilhørende nyt design af "tænd-sluk-knappen" (syn's selv, den er blevet rigtig go'  sammenlignet med den originale med det røde kryds) - på en testside på adr.:
http://ravklubben.dk/htm/index.html

- læg lige mærke til hvordan den lander - og sammenlign med den oprindelige måde at stoppe 'kræet på' ...
Jeg syn's bare ikke, at jeg kan forsvare at bruge den 'offentligt', når den kun virker i IE
- så jeg håber på prof. hjælp.
Avatar billede erikjacobsen Ekspert
03. april 2005 - 23:00 #1
Du skal vel først gøre noget ved

Advarsel: Element tilgået via ID/NAME i globalt scope. Brug W3C standarden document.getElementById() istedet for.
Kildefil: http://ravklubben.dk/htm/newfly.js
Linje: 98

Og det sker i flere linier end denne.
Avatar billede froggy51 Nybegynder
03. april 2005 - 23:40 #2
Jamen det kan da godt være - det er endnu lidt sort snak for mig, da jeg ikke har arbejdet med så store scripts før - men jeg vil da forsøge at finde ud af, hvad det er du mener ;-)
Avatar billede froggy51 Nybegynder
04. april 2005 - 07:08 #3
Øh, nu har jeg forsøgt at finde "ID/NAME" i filen - linje 98 er:

    if (ns) {

- så jeg er lidt på glatis.
Vil en eller anden være sød at fortælle mig, hvad det er jeg skal erstatte med "document.getElementById(), så jeg kan komme videre, uden at famle i blinde og måske rette noget forkert.
Evt. fortælle hvordan man får den/de nævnte advarsler frem, da man tilsyneladende ikke kan validere *.js-filer hos W3C.
Avatar billede froggy51 Nybegynder
04. april 2005 - 07:22 #4
Når jeg kigger i Firefox's JavaScript Console får jeg beskedden:
Error: FlyDiv is not defined Line 149

Linje 149 ser således ud:
        document.layers['FlyDiv'].left = picX;

- men hvor skal definitionen ind - og hvordan?
Avatar billede froggy51 Nybegynder
04. april 2005 - 08:01 #5
Jeg har nu opdateret Firefox til v.1.0.2 - så nu kan jeg også få samme meddelse frem i Firefox's JavaScript-konsol som erikjacobsen (den kom ikke i v.0.9.2, hvor fluen slet ikke bevægede sig) - Det fortæller mig bare ikke, hvad jeg skal rette eller hvad der menes med "ID/NAME i globalt scope."
Avatar billede erikjacobsen Ekspert
04. april 2005 - 09:38 #6
Formentlig bare

document.getElementById('FlyDiv').left = picX;
Avatar billede froggy51 Nybegynder
04. april 2005 - 11:55 #7
er gjort - ændrer intet, bortset fra at det smadrede layoutet i Firefox, indtil jeg ændrede til: document.getElementById.layers('FlyDiv').left = picX;
Den virker stadig fint i IE - flyver forkert i Firefox og er helt død i Netscape
Fejlmeldnignerne kommer stadig.
Uploader den tilrettede fil indenfor 5 min.
Avatar billede olebole Juniormester
04. april 2005 - 15:51 #8
<ole>

document.getElementById.layers('FlyDiv').left = picX;
- giver absolut ingen mening  :)

/mvh
</bole>
Avatar billede froggy51 Nybegynder
04. april 2005 - 22:51 #9
Kære Ole,
Kunne du så være rar, at fortælle, hvad der ville give en mening - og evt. hvorfor det smadrer layoutet (men kun i Firefox), hvis jeg fjerner "layers"?

Jeg må indrømme, at jeg er en lillebitte smule skuffet over de non-konstruktive kommentarer, der er kommet til mit spørgsmål. Jeg havde jo håbet på at kunne lære noget herinde blandt "eksperterne".

Der er formentlig brug for noget dobbelt-kodning (eller hvad vi nu skal kalde det) for at få skidtet til at virke i alle 3 browsere, men HVAD og HVORDAN?

Det er første gang jeg forsøger med et spørgsmål - og jeg fik af vide af en bekendt, at det her var "stedet med de hårde gutter", så please vis nu, hvad I duer til.
Avatar billede erikjacobsen Ekspert
04. april 2005 - 22:58 #10
Så må du selv være lidt konstruktiv. Det er klart du skal bruge getElementById som jeg skriver, og vis os så hvad der ikke virker. Du ville uploade noget kl. 12 - har du gjort det.

Og Ole er egentlig også umådeligt konstruktiv: det er ikke nemt det her JavaScript og DOM osv i de forskellige browsere osv. så mellem linierne i Oles indlæg skal du læse at du har behov for at sætte dig ned og i det mindste lære nogle fundamentale ting.

Du får nok ingen til at lave det for dig. Men du kan nok i nogle tilfælde få at vide hvad der er galt. Du får gratis "hjælp", men næppe gratis løsninger.
Avatar billede olebole Juniormester
04. april 2005 - 23:30 #11
Forklaringen er, at der indtil IE5.0 og NS6.0 blev brugt helt proprietære DOM's og script-DOM bindinger i de forskellige browsere.
Således brugte man i NS4.X følgende udtryk til at referere til et lag med id="gnu":
  var ref = document.layers["gnu"];

I IE4.X refererer man gennem all-arrayet, som indeholder referencer til alle dokumentets elementer:
  var ref = document.all["gnu"];

Fra IE5.0 og NS6.0 har W3C's officelle DOM og deres ECMA-DOM bindinger været gældende i 'de to store' og her bruger man udtrykket:
  var ref = document.getElementById("gnu");

- dog kan man i IE stadig anvende all-arrayet. Det kan imidlertid aldrig anbefales, da det er en dårligt performende (langsommere) måde at tilgå elementer på.

Derudover er der forskel på, hvordan man tilgår alt muligt andet i et HTML-dokument ... NS4.X ser f.eks. - i modsætning til alle andre browsere - indholdet af et div som et selvstændigt dokument, osv, osv.

Som Erik skriver: Du bør tilegne dig noget grundlæggende viden om det, du laver.
Hvis din ven har gode erfaringer med Eksperten, kunne det sagtens hænge sammen med, han selv har gjort en indsats for at sætte sig ind i teknikkerne - og dermed har bedre forudsætninger for dels at stille et spørgsmål og dels at få noget ud af evt. svar  :)
Avatar billede froggy51 Nybegynder
04. april 2005 - 23:33 #12
Tak Erik, jeg havde da heller ikke regnet med, at I skulle lave det for mig - og ja, selvfølgelig har jeg oploadet det nye - men med "layers" - jeg kan evt. prøve at lave det uden, og så se om "succesen" med sidens lay-out gentager sig.
Jeg forsøger jo netop at lære noget - og de rettelser, som I kan se i forhold til det oprindelige script er da vist et godt stykke ad vejen.
Kigger ind igen i morgen (på et eller andet tidspunkt) - Jeg skal nok gi' et praj, når jeg har uploadet filen uden "layer".
G'net-nat for nu ;-)
Avatar billede erikjacobsen Ekspert
04. april 2005 - 23:56 #13
Du skal gøre det der med getElementById alle de stedet den brokker sig.
Fx siger den linie 150. Flydiv er et  "ID/NAME i globalt scope.":

        FlyDiv.style.top = picY - pic.height / 2;

Og glem alt om Netscape 4.x - skulle der komme nogen forbi med den, så virker fluen blot ikke.
Avatar billede roenving Novice
05. april 2005 - 01:18 #14
-- og det ville også være overraskende om deres computer overhovedet virkede med internet !-)

Måske man ligefrem alvorligt kunne snakke om Njetscape ...

-- og selv om det mest er sjove bemærkninger, har det det alvorlige grundlag, at hvis folk ikke har opdateret deres browser de sidste 5-8 år, får de nok mere fejl (og hvadsomhelst, som er meget mere grimt !-), når de bevæger sig rundt via browseren !o]
Avatar billede froggy51 Nybegynder
05. april 2005 - 11:03 #15
*LOL* roenving, du har fuldstændig ret - det er jo nok et script af ældre dato - og vi kan ikke ta' hensyn til ret meget mere end 2 versioner baglæns.
Min (vist nok "lidt" forældede) "O'Reiley Javascript in a Nutshell" kender slet ikke getElementById, så deet ...

- og til Erik:
Jeg har forsøgt frem og tilbage adskillige gange med de ovennævnte råd, men Firefox bliver ved med at brokke sig over linje 98,149 og 150 - selvom jeg har ændret til "getElementById". Den kvadrer igen layoutet, så spraydåsen ikke kommer øverst (headeren er en gif med transp. baggrund, så det ser mystisk ud).
Netscape 7.2 finder "kun" to fejl - et eller andet i linje 104 som jeg ikke kan nå at se, da den meddelse flimrer for hurtigt forbi og i linje 149: "Flydiv is not defined"
Linje 104 er i øvrigt blank - men jeg sætter lige de andre ind her:
-----------------------------------------------------
145 function moveFly() {
146    // moves the fly in a new position...
147    calcNewPos();
148    if (ns) {
149        document.getElementById.left = picX;
150        document.getElementById.top = picY;
151    }else{
152        FlyDiv.style.left = picX - pic.width / 2;
153        FlyDiv.style.top = picY - pic.height / 2;
154    }
------------------------
Jeg tror dog, at fejlen kunne ligge højere oppe i scriptet - det er bare det, jeg ikke lige kan gennemskue.

Det nye og rettede scrip er lagt på: http://ravklubben.dk/htm/index3.html
og selve scriptet: http://ravklubben.dk/htm/newfly3.js

Et andet eksempel, hvor fejlmeddelserne (vist nok) er de samme, men hvor layoutet m.h.t. dåsen er ok ligger på: http://ravklubben.dk/htm/index2.html
og scriptet på: http://ravklubben.dk/htm/newfly2.js
Avatar billede roenving Novice
06. april 2005 - 00:11 #16
Du skal jo fortælle funktionen hvilket id, den skal hente elementet med ...

    document.getElementById('FlyDiv').style.left = picX + 'px';
    document.getElementById('FlyDiv').style.top = picY + 'px';

-- og der er to andre vigtige ændringer:

-- positionering er en den af style-objektet på html-elementet, og en længde skal ifølge css-standarden ignoreres, hvis den ikke har angivet en enhed !-)
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