Toon posts:

[JS] Stack overflow probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een scriptje gemaakt, wat het volgende doet: alle gewone tekst uit een stuk html (dwz alles behalve de tekst tussen < en >) worden door een replace/modify functie gegooid. Met dat scriptje kun je dus bijv alle o's in een pagina vervangen door :O, alle letters omdraaien of andere leuke geintjes, zonder de html codes te verkloten. Ja leuk he! :D

Dit werkt goed met kleine pagina's maar bij grotere pagina's krijg ik een stack overflow... :? Het is een recursieve functie maar ergens zit er wellicht toch iets verkeerd of misschien kan JS het gewoon niet meer aan, te weinig geheugen? Of een brakke garbage collection? Iemand tips hoe ik dit kan oplossen? Ik werk met IE5.5 btw.

Dit is de code:
(om uit te testen dit scriptje in de header van een willekeurige pagina plakken en dan een body onLoad="modifyPage()")
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<SCRIPT LANGUAGE="Javascript">

function modify(s, modification)
{
    var modText = "";
    var Text = "";
    var res = "";

    if (s.indexOf("<") > -1)
        Text = s.substring(0, s.indexOf("<"));
    else
        Text = s;
    
    modText = modifyText(Text, modification);


    if (s.indexOf("<") > -1)
    {
        html = s.substring(s.indexOf("<"), s.indexOf(">") + 1);
        rest = s.substring(s.indexOf(">") + 1);

        if (rest.length < 1)
            modText += html;
        else
            modText += html + modify(rest, modification);
    }   

    return modText;
}

function modifyText(s, modification)
{
    var res = "";
    
    if (modification == "smiley")
    {
        url = "http://forum.fok.nl/i/s/yawnee.gif";
        res = s.replace(/o/g, "[img]'"+url+"'[/img]");
    }
    else if (modification == "iets anders")
    {
        [doe iets anders met var s]
        ....
        ....
    }

    return res;
}

function modifyPage()
{
    html = document.body.innerHTML
    document.body.innerHTML = modify(html, "smiley");
}

</SCRIPT>

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 00:23

Pelle

🚴‍♂️

JS krijgt inderdaad maar heel weinig geheugen toegewezen helaas :/
Mijn recursieve floodfill functie ging al bij een veld van 20x20 over z'n nek..

Ik denk niet dat je er veel aan kunt doen, behalve dan wellicht proberen of je je functie iteratief kunt krijgen.

Verwijderd

Dat is idd jammer.

Hebben jullie ook wel eens gehad dat explorer een vraag genereerd of je de scripts nog wel wilt uitvoeren? (ik dus wel, bij een zoek functie)

Verwijderd

Verwijderd schreef op 16 December 2002 @ 19:54:
Dat is idd jammer.

Hebben jullie ook wel eens gehad dat explorer een vraag genereerd of je de scripts nog wel wilt uitvoeren? (ik dus wel, bij een zoek functie)
ja als een loop langer dan 1 minuut bezig is krijg je z'n vraag geloof ik... IE neemt aan dat er ergens een oneindig while/for statement staat (wat vaak ook wel zo is..)

waarschijnlijk krijg je deze melding alleen bij grote lappen txt..!?

Verwijderd

Milo Vermeulen heeft een bookmarklet gemaakt wat ook zoiets dergelijks doet. Misschien heb je daar wat aan:
http://milov.nl/entry/922

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Kun je geen gebruik maken van JS RegEx? Volgens mij heeft deze helaas niet zoals Perl een evaluation-functie, maar misschien dat je er zelf iets mee kunt maken.
Pagina: 1