/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Javascript i Opera 7.50
Fra : Morten Lehrmann


Dato : 14-02-04 10:20

Jeg har en (PHP-)side med flg. overordnede layout:

<html>
...
<script type="text/javascript" language="javascript1.2" src="/fil.js">
...
<iframe id="iframe1">
<html>
<body onload="parent.frames.kald_af_function_i_fil(self);return true;">
...
</body>
</html>
</iframe>
</html>


Hvor jeg fra iframe1 kalder noget Javascript, som ligger i "fil.js", der
refereres fra hovedsiden.

Det virker fint i både IE og Mozilla i diverse versioner. I øvrigt
validerer siden hos W3C.

Min kamp står nu mod Opera 7.50 (Linux), som siger flg.:

Event thread: onload
Error:
name: TypeError
message: Statement on line 1:
Expression did not evaluate to a function object:
parent.frames.kald_af_function_i_fil


Nogen ideer?

Pfht.

Mvh.
Morten



--
SuSE Linux 8.2 and
Debian Linux for i386 and Alpha -o)
http://counter.li.org - User #212543 /\
My email is a spam trap. _\_v
Try: morten at lehrmann dot cjb dot net

 
 
Martin Hintzmann And~ (14-02-2004)
Kommentar
Fra : Martin Hintzmann And~


Dato : 14-02-04 11:18

Morten Lehrmann wrote:

[snip iframe kode]

>
> Hvor jeg fra iframe1 kalder noget Javascript, som ligger i "fil.js", der
> refereres fra hovedsiden.
>
> Det virker fint i både IE og Mozilla i diverse versioner. I øvrigt
> validerer siden hos W3C.
>
> Min kamp står nu mod Opera 7.50 (Linux), som siger flg.:
>

[snip fejl kode]

>
>
> Nogen ideer?
>

Det er rimligt svært at hjælpe dig når du ikke har lavet et online
eksempel man kan se på. Men umiddelbart tror jeg det kan skyldes 4 ting.

1) Fjern language="javascript1.2" fra script elementet det er udgået.
2) benyt den rigtige syntax window.parent i stedet for bare parent.
3) frames er en collection af frames og du skal derfor kalde den ved
navn eller index ex. frames[0]
4) Jeg mener man skal benytte "this" i stedet for "self", men er ikke
sikker.

Men igen vis et online eksempel, så er det noget nemmere at hjælpe dig.

PS. iframes er "so much last millenium", læs mere på dette postkort
http://www.lazycat.org/postcards/frames.html

Hintzmann c",)

Lasse Reichstein Nie~ (14-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 14-02-04 15:47

Martin Hintzmann Andersen <user@domain.invalid> writes:

> 1) Fjern language="javascript1.2" fra script elementet det er udgået.

Hørt! At bruge lige præcist version 1.2 i language-attributten er ikke
bare forældet, det er direkte farligt, da version 1.2 adskilte sig
fra både tidligere og senere versioner af Javascript på subtile punkter,
og *nogle* browsere skifter til version 1.2's måde at gøre ting på hvis
man skriver language="Javascript1.2" ... men ikke alle.

Drop language-attributten. Hvis man (af uforklarlige grunde) insisterer
på at bruge den, så skriv *alt* andet end lige 1.2!

> 2) benyt den rigtige syntax window.parent i stedet for bare parent.

Selvom jeg er enig i at det er smartest at skrive "window.parent", så
er det på ingen måde mere rigtigt. I de nuværende HTML-browsere er
"window" en global variabel der peger på det globale objekt. Det
globale objekt har alle globale variable som egenskaber. På samme
måde er "parent" en global variabel/egenskab ved det globale objekt.

Hvis man skriver "parent" (og der ikke er andre deklarationer af en
variabel der hedder "parent" der overskygger) så får man fat i den
globale variabel. Det samme gør man hvis man skriver "window.parent".

> 4) Jeg mener man skal benytte "this" i stedet for "self", men er ikke
> sikker.

Det afhænger af hvad man mener. Der hvor koden står, vil "this"
referere til body-elementet mens "self" (en global variabel) peger på
"window"-objektet ("self" og "window" er to globale variable der altid
har samme værdi - en reference til det globale objekt som også dubblerer
som vindue-objektet).

> PS. iframes er "so much last millenium", læs mere på dette postkort
> http://www.lazycat.org/postcards/frames.html

Cool link. Jeg kan lide ham!
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Erik Ginnerskov (14-02-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 14-02-04 15:53


"Lasse Reichstein Nielsen" <lrn@hotpop.com> skrev

> Hørt! At bruge lige præcist version 1.2 i language-attributten er ikke
> bare forældet, det er direkte farligt, da version 1.2 adskilte sig
> fra både tidligere og senere versioner af Javascript på subtile punkter,
> og *nogle* browsere skifter til version 1.2's måde at gøre ting på hvis
> man skriver language="Javascript1.2" ... men ikke alle.

Det er meget længe side, jeg ophørte med at bruge language-attributten. Men
at version 1.2 er så uheldig at bruge, er nyt for mig.

Kan du give et link til en fuldt opdateret manual til javascript.
Jeg kan se, at den jeg linker til på Hjemmesideskolen, er forældet i
utilladelig grad:

http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/

Min egen indsigt i javascript trænger også til at blive slebet.

--
Med venlig hilsen
Erik Ginnerskov
http://www.hjemmesideskolen.dk - http://www.html-faq.dk
http://hjem.get2net.dk/egin



Lasse Reichstein Nie~ (14-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 14-02-04 16:29

"Erik Ginnerskov" <eginNOSPAM@html-faq.dk> writes:

> "Lasse Reichstein Nielsen" <lrn@hotpop.com> skrev
>
>> Hørt! At bruge lige præcist version 1.2 i language-attributten er ikke
>> bare forældet, det er direkte farligt, da version 1.2 adskilte sig
>> fra både tidligere og senere versioner af Javascript på subtile punkter,
>> og *nogle* browsere skifter til version 1.2's måde at gøre ting på hvis
>> man skriver language="Javascript1.2" ... men ikke alle.
>
> Det er meget længe side, jeg ophørte med at bruge language-attributten. Men
> at version 1.2 er så uheldig at bruge, er nyt for mig.

JavaScript 1.2 blev hurtigt glemt igen. Den findes kun som standard
i Netscape 4.0-4.05. Fra 4.06 brugte de JavaScript 1.3 som default.
MEN, alle netscape-browsere siden (og Mozilla) stoler på dig når
du siger language="Javascript1.2" og bruger den version.

Et eksempel på kode der opfører sig forskelligt er:

<!-- eksempel på forkert kode! -->
<script language="JavaScript1.2"> // skift til 1.3 og sammenlign
var x = 2; // skift til 0 og sammenlign
var tmp;
if (tmp = x) {
alert("x != 0");
tmp = 1/tmp;
}
alert([x,tmp]);
</script>

her bruger man en assignment i betingelsen. Hvis x er 0, så bliver tmp
0, ellers bliver den 1/x.

Prøv at køre denne kode i IE eller Opera og så i Netscape eller Mozilla.

I Javascript 1.2 vil "tmp = x" blive fortolket som en *sammenligning*
(altså som om programmøren mente "==" men glemte at skrive det). Det
vil give den modsatte virkning af hvad man ønsker, da.

> Kan du give et link til en fuldt opdateret manual til javascript.

Hvilken Javascript? Der er Netscapes JavaScript 1.4 (og de arbejder på
1.5). Der er Microsofts JScript. Der er andre browseres versioner. Og
der er standarden: ECMAScript, ECMA 262, som kun dækker sproget, ikke
DOM.

Jeg har en del link på
<URL:http://www.infimum.dk/HTML/references.html#ref_1_4>
Både Javascript og DOM er relevante.

> http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/

Cool. En Javascript 1.1 reference. Jeg har ikke kunnet finde en fra
før 1.2 via deres hovedside :)

> Min egen indsigt i javascript trænger også til at blive slebet.

Jeg anbefaler comp.lang.javascript-faq'en (og gruppen for den sags
skyld). Der går man meget op i at ting ikke bare skal virke i en
browser, og at overholde standarder i det omfang det er muligt (der
er ting der ikke er standarder for endnu).

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Erik Ginnerskov (14-02-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 14-02-04 16:58


"Lasse Reichstein Nielsen" <lrn@hotpop.com> skrev

> Hvilken Javascript? Der er Netscapes JavaScript 1.4 (og de arbejder på
> 1.5). Der er Microsofts JScript. Der er andre browseres versioner. Og
> der er standarden: ECMAScript, ECMA 262, som kun dækker sproget, ikke
> DOM.

Her ville 1.4 være det mest relevante.

> Jeg har en del link på
> <URL:http://www.infimum.dk/HTML/references.html#ref_1_4>
> Både Javascript og DOM er relevante.

Jeg lægger et bogmærke ved din side. Jeg kan se, at jeg er håbløst bagud.

> > http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/
>
> Cool. En Javascript 1.1 reference. Jeg har ikke kunnet finde en fra
> før 1.2 via deres hovedside :)

Som jeg sagde: Bagud

> Jeg anbefaler comp.lang.javascript-faq'en (og gruppen for den sags
> skyld). Der går man meget op i at ting ikke bare skal virke i en
> browser, og at overholde standarder i det omfang det er muligt (der
> er ting der ikke er standarder for endnu).

Takker for info. Der er noget at gå i gang med.

--
Med venlig hilsen
Erik Ginnerskov
http://www.hjemmesideskolen.dk - http://www.html-faq.dk
http://hjem.get2net.dk/egin



Morten Lehrmann (15-02-2004)
Kommentar
Fra : Morten Lehrmann


Dato : 15-02-04 11:04

Martin Hintzmann Andersen <user@domain.invalid> writes:

> 1) Fjern language="javascript1.2" fra script elementet det er udgået.

Hjælper ikke.

> 2) benyt den rigtige syntax window.parent i stedet for bare parent.

Heller ikke.

> 3) frames er en collection af frames og du skal derfor kalde den ved navn
> eller index ex. frames[0]

Så siger Mozilla:
Error: window.parent.frames[0] is not a function.

Er syntaksen anderledes?


> 4) Jeg mener man skal benytte "this" i stedet for "self", men er ikke sikker.

Det giver ingen forskel.

> Men igen vis et online eksempel, så er det noget nemmere at hjælpe dig.

Jeps.

Fil javascript.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<script type="text/javascript" src="js.js">
</script>

<iframe src="iframe.html">
</iframe>

Body

</body>
</html>



Fil iframe.html:

<html>
<head>
<title>Iframe</title>
</head>
<body onload="window.parent.frames.x(this);return true;">

Iframe body

</body>
</html>


Fil js.js:

function x(y) {
alert("Hallo, verden");
}




> PS. iframes er "so much last millenium", læs mere på dette postkort
> http://www.lazycat.org/postcards/frames.html

Jeg tænkte nok, jeg skulle få kritik for dem
Men de var bedste løsning efter nogle CSS-forsøg, som falder på
at et større amerikansk firma har lavet en browser med en
håbløs CSS-understøttelse

Tak til alle for hjælpen indtil nu.


Mvh
Morten


--
SuSE Linux 8.2 and
Debian Linux for i386 and Alpha -o)
http://counter.li.org - User #212543 /\
My email is a spam trap. _\_v
Try: morten at lehrmann dot cjb dot net

Lasse Reichstein Nie~ (15-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 15-02-04 13:29

Morten Lehrmann <morten@lehr.invalid> writes:

> Martin Hintzmann Andersen <user@domain.invalid> writes:
>
>> 1) Fjern language="javascript1.2" fra script elementet det er udgået.
>
> Hjælper ikke.

Gør det alligevel :)

>> 3) frames er en collection af frames og du skal derfor kalde den ved navn
>> eller index ex. frames[0]
>
> Så siger Mozilla:
> Error: window.parent.frames[0] is not a function.

Så bruger du den forkert.
Hvis du skal have fat i en frame der er barn af samme parent som dig selv,
så skriver man
window.parent.frames['navnPåFrame']

> Er syntaksen anderledes?

End hvad? :)

>> Men igen vis et online eksempel, så er det noget nemmere at hjælpe dig.
>
> Jeps.
>
> Fil javascript.html:

Et script og en iframe uden navn.
> <script type="text/javascript" src="js.js">
> </script>
>
> <iframe src="iframe.html">
> </iframe>

> Fil iframe.html:
>
> <body onload="window.parent.frames.x(this);return true;">

Altså den der er spændende.
Ud fra det du har vis, så er løsningen:
onload="window.parent.x(this);"

Du skal ikke finde en frame i parent, funktionene ligger direkte
i den.

> Men de var bedste løsning efter nogle CSS-forsøg, som falder på
> at et større amerikansk firma har lavet en browser med en
> håbløs CSS-understøttelse

Hear, hear!

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Morten Lehrmann (15-02-2004)
Kommentar
Fra : Morten Lehrmann


Dato : 15-02-04 13:51

Lasse Reichstein Nielsen <lrn@hotpop.com> writes:

> Gør det alligevel :)

OK, OK. Er gjort

> Altså den der er spændende.
> Ud fra det du har vis, så er løsningen:
> onload="window.parent.x(this);"
>

Jamen, det er var jo bare det

Tusinde tak. Og så er det slet ikke Opera, men mig, der havde fejlen
kan jeg forstå

Jeg er ingen ørn til Javascript.

Mvh
Morten



--
SuSE Linux 8.2 and
Debian Linux for i386 and Alpha -o)
http://counter.li.org - User #212543 /\
My email is a spam trap. _\_v
Try: morten at lehrmann dot cjb dot net

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste