[JS]Regexp werkt niet in IE

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Nu online
Voor een phpBB 3.x forum heb ik eerder een mod geschreven die zorgt dat als iemand een afbeelding quote, die omgezet wordt in
Een beetje zoals dat hier ook gebeurd. Die oude mod doet zijn ding echter pas bij het posten. Ofwel:
1. Je citeert een bericht met afbeelding
2. Je schrijft je bericht, eventuele afbeeldingen binnen quotetags staan er nog gewoon in
3. Bericht wordt geplaatst, eventuele afbeeldingen binnen quoteblokken worden omgezet.

Dit wil ik veranderen in:
1. Je citeert een bericht met afbeelding
2. Je schrijft je bericht, eventuele afbeeldingen binnen quotetags worden bij het laden van je berichtvenster omgezet
3. Bericht wordt geplaatst, als je handmatig weer een afbeelding tussen de quotetags hebt gezet blijft die staan.

Om de verandering te maken heb ik allereerst de code die dit doet verplaatst van de message_parser naar het posting-bestand. Dat was simpel. Echter kun je in phpBB 3.x ook berichten citeren die je in de topicreview onder je textarea kunt zien. Deze functie werkt met javascript. Daar wil ik dus een gelijkaardige code inzetten. Dat is momenteel deze:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    if (theSelection)
    {
        var key;
        var qcode = theSelection.match(/\[code\](.*?)\[\/code\]/ig);
        for (key in qcode)
        {
            qrepl = qcode[key].replace(/\[img\]/gi, '[img]');
            theSelection = theSelection.replace(qcode[key], qrepl);
        }
        theSelection = theSelection.replace(/\[url=(.*(jpg|jpeg|gif|png|bmp))\]\[img\](.*)\[\/img\]\n*\[\/url\]/ig, '[ [url=$1]Afbeelding[/url] ]');
        theSelection = theSelection.replace(/\[url=(.*)\]\[img\](.*)\[\/img\]\n*\[\/url\]/ig, '[ [url=$1]Afbeelding[/url] ]');
        theSelection = theSelection.replace(/\[img\](.*)\[\/img\]/ig, '[ [url=$1]Afbeelding[/url] ]');
        theSelection = theSelection.replace(/[img]/gi, '[img]');
        insert_text('[quote="' + username + '"]' + theSelection + '[/quote]'); 
    }

(het hardcoded "Afbeelding" moet ik nog omzetten naar de languagevar, maar hoe die hier geregeld zit moet ik nog uitzoeken)

Tot zover de inleiding. Punt is nu: bovenstaande werkt perfect in Fx en Opera, maar niet in IE, daar wordt niets uitgevoerd. Het lijkt te zitten in regel 6, aangezien het wel uitgevoerd wordt als ik die comment. Of het daar in zit ben ik overigens niet zeker van.
Ik vraag me af waar het in zit, en ben me er nu al een tijdje op aan het stukbijten. Javascript is eigenlijk niet zo mijn ding, ik hou me meer bezig met PHP. Alle tips zijn dus welkom. :)

Edit: de blokhaken in de replacement moeten special characters zijn, maar die worden zo te zien hier al meteen verwerkt. Het gaat echter om het idee.

Tjolk is lekker. overal en altijd.


Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Dit heeft volgensmij te maken met de javascript "for ( .. in ..)" implementatie van IE.

voorbeeld:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
var theSelection = "blabla[kode]abc[/kode]xyzxyz[kode]def[/kode]123"
var qcode = theSelection.match(/\[kode\](.*?)\[\/kode\]/ig);
for (key in qcode)
{
  alert(key)
} 

for (key in qcode)
{
  alert(qcode[key])
} 


In FF krijg je in de eerste for lus 2 alerts, namelijk "0" en "1" (de indexen).
De tweede lus retouneerd dan ook mooi "[kode]abc[/kode]" en "[kode]def[/kode]".

Echter in IE krijg je bij de eerste for lus 5 alerts, namelijk "input", "0", "1", "index","lastindex".
De tweede lus geeft dan 5 keer wat terug wat bij de rest van jou code hoogstwaarschijnlijk een error veroorzaakt.

Je zult voor IE de for..in lus moeten aanpassen naar een "gewone" for lus
JavaScript:
1
2
3
4
for (var i=0; i<qcode.length; i++)
{
  
} 

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Nu online
Aha, dat was 'm! :D
Zoiets moet je ook maar net weer weten. Altijd leuk, dingen IE proof maken. :?

Thanks!

Tjolk is lekker. overal en altijd.