[JS] document.write bugje in NS4?

Pagina: 1
Acties:

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 22:43

Pelle

🚴‍♂️

Topicstarter
Dit bugje(?) kwam ik gister tegen in NS4. Ik heb een absoluut gepositioneerde layer, waarin ik een scriptje run met een functie die iets moet schrijven.
Zie onderstaand stukje code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<html>
<head>
    <title>raaarrrr </title>
    <style type="text/css">
    <!--
      #blaat {
        position      :   absolute;
        top      :   40px;
        left        :   40px;
      }
    -->
    </style>
    <script language="javascript" type="text/javascript">
    <!--
      function writeMeuk(tekst) {
        document.write(tekst);
      }
    // -->
    </script>
</head>

<body>


<div id="blaat">
<script language="javascript" type="text/javascript">
<!--
    writeMeuk('doet nie in NS4');
// -->
</script>
</div>

</body>
</html>

Het gekke is dat een directe document.write() in <div id="blaat"> wel werkt:
code:
1
2
3
4
5
6
<div id="blaat">
<script language="javascript" type="text/javascript">
<!--
    document.write('doet nie in NS4');
// -->
</script>

Maar dat wil ik niet aangezien ik juist een functie nodig had om mezelf een berg werk te besparen. En nu weet ik wel dat het met document.layers['blaat'].document.write() wel lukt, maar dat neemt niet weg dat ik het raar vind dat wanneer je buiten je scriptje komt, NS4 niet meer weet dat hij gewoon door moet schrijven in die <div>. Iemand enig idee hoe dit komt?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je hebt kans dat NS4 in dit stukje:
code:
1
2
3
4
5
6
7
<div id="blaat">
<script language="javascript" type="text/javascript">
<!--
    document.write('doet dus wel in NS4, toch :? ;)');
// -->
</script>
</div>

het object "document" binnen de "scope" van die ID layer neemt, terwijl wanneer je hem binnen een functie aanroept, hij de document uit de global scope neemt, snappie :?

probeer dit eens:
code:
1
2
3
4
function writeMeuk ( d, tekst )
{
   d.write ( tekst );
}


code:
1
2
3
4
5
6
7
<div id="blaat">
<script language="javascript" type="text/javascript">
<!--
    writeMeuk ( document, tekst );
// -->
</script>
</div>

hth :)

edit: typo

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Je moet na een ingeladen pagina in NS4 eerst de layer aanspreken met .open om vervolgens content te wijzigen . :) Dus als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
if (is.ns4) {
        var doc = document.layers[id].document;
         doc.open();
         doc.write(text);
         doc.close();
        } 
    else if (is.ie) {
        document.all[id].innerHTML = text;
        }
    else if (is.ns5) {
        document.getElementById(id).innerHTML = text;   
        }
    }

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 22:43

Pelle

🚴‍♂️

Topicstarter
Op donderdag 24 januari 2002 11:41 schreef drm het volgende:
Je hebt kans dat NS4 in dit stukje: [knip]
het object "document" binnen de "scope" van die ID layer neemt, terwijl wanneer je hem binnen een functie aanroept, hij de document uit de global scope neemt, snappie :?
Ja dat snap ik wel, maar ik vind het raar dat hij niet gewoon doet wat er staat. Als er in een functie staat: document.write(), dan moet er gewoon tekst naar de pagina geschreven worden. Punt uit. Ongeacht wat voor tags er allemaal wel net om heen staan.

Ik vind dit namelijk een andere situatie dan die Gordijnstok bedoelt:
Op donderdag 24 januari 2002 11:43 schreef Gordijnstok het volgende:
Je moet na een ingeladen pagina in NS4 eerst de layer aanspreken met .open om vervolgens content te wijzigen . :) Dus als volgt: [knip]
Ik wil niet on-the-fly de content van een layer veranderen, ik wil gewoon bij het renderen van de pagina een JS-functie gebruiken om mezelf wat werk uit handen te nemen.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Pelle:
Ja dat snap ik wel, maar ik vind het raar dat hij niet gewoon doet wat er staat.
Als je snapt wat ik bedoel, dan snap je ook dat NS4 doet wat er staat ;)

Het probleem is denk ik, dat NS4 misschien wel de Javascript code op een stack ofzo zet, om vervolgens eerst de HTML te renderen, en dan pas alle functies uit te voeren. En als jij dan hebt verteld dat hij in "document" moet writen en niet precies waar, wie gaat NS4 dan vertellen dat jij die layer bedoelde :?

Het is krom, dat snap ik wel, maar ik kan me voorstellen dat NS4 het zo interpreteert.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 22:43

Pelle

🚴‍♂️

Topicstarter
Op donderdag 24 januari 2002 11:53 schreef drm het volgende:
Als je snapt wat ik bedoel, dan snap je ook dat NS4 doet wat er staat ;)
Ik snap wel wat je bedoelt, dat is het punt niet :)

In het grote Pelle-gaat-z'n-NS4-ondersteuning-afbouwen-MasterPlan zijn dit natuurlijk irritante dingen om tegen te komen. En zolang er nog mensen zijn die NS4 blijven gebruiken, zal er voor 95% van de scripts (dus zelfs een simpele zoals deze) een NS4-workaround moeten zijn. Brrr.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Pelle:

[..]

Ik snap wel wat je bedoelt, dat is het punt niet :)

In het grote Pelle-gaat-z'n-NS4-ondersteuning-afbouwen-MasterPlan zijn dit natuurlijk irritante dingen om tegen te komen. En zolang er nog mensen zijn die NS4 blijven gebruiken, zal er voor 95% van de scripts (dus zelfs een simpele zoals deze) een NS4-workaround moeten zijn. Brrr.
werkt dit niet?
  • [sup]_____________________________________[/sup] probeer dit eens: [code]function writeMeuk ( d, tekst ) { d.write ( tekst ); }[/code] [code]<div id="blaat"> <script language="javascript" type="text/javascript"> <!-- writeMeuk ( document, tekst ); // --> </script> </div>[/code] [sup]_____________________________________[/sup]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 22:43

Pelle

🚴‍♂️

Topicstarter
Op donderdag 24 januari 2002 12:00 schreef drm het volgende:
werkt dit niet?
Jawel hoor, maar het blijft een workaround voor een NS4-behaviour die je anders verwacht omdat het zo ranzig simpel is :)

Ik zal 'm onthouden in ieder geval; nu ros ik er namelijk nog gewoon een browsercheck uit en zet er voor NS4 nog document.layers["blaat"] voor.

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Ns4 is kut. 't is zelfs zo erg dat als je een functie binnen een div defineert (dus als je die writeMeuk functie ook samen met de aanroep in die div zou zetten) dat die niet aan te spreken is (zonder document.layers.... ervoor of ueberhaupt niet) van buiten de layer zelf

als je die writeMeuk bij de aanroep zet werkt het wel in ns4, en als je in de writeMeuk in de head document.layers......write() gebruikt ook :{

Ik denk dus ook dat het daar aan ligt, je springt met aanroepen van layer naar document en terug, en dat vindt ns4 niet tof ofzo.

[edit]
drm:
code:
1
2
3
4
function writeMeuk ( d, tekst )
{
   d.write ( tekst );
}


code:
1
2
3
4
5
6
7
<div id="blaat">
<script language="javascript" type="text/javascript">
<!--
    writeMeuk ( document, tekst );
// -->
</script>
</div>
da's toch een prachtige oplossing :D

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 22:43

Pelle

🚴‍♂️

Topicstarter
Op donderdag 24 januari 2002 12:10 schreef Clay het volgende:
da's toch een prachtige oplossing :D
Zekers. Het kwaad was echter al geschied :) Het ging me er ook niet om om een oplossing voor het probleem te krijgen, want dat was niet zo moeilijk, maar ik vroeg me dus even af waarom het niet werkte.

Geen bug dus, maar gewoon een brakke manier van omgaan met het schrijven van en wisselen tussen document en layers.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Clay:
da's toch een prachtige oplossing :D
dat dacht ik ook :)

Ik vind het niet zo gek dat NS4 op die manier werkt. Het is gewoon een kwestie van global scope en local scope. Dat NS4 kut is is natuurlijk een open deur :D

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1