[JS/AJAX] innerHTML met script(s) er in

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rudie dirkx

rudie dirkx

24/12/2007 17:45:00
Quote Anchor link
Hoi

Fijne dagen iedereen alvast :)

To the point: Ik haal met AJAX stukken pagina op, die weergegeven worden als een 'nieuw venster'. De achtergrond krijgt een semitransparante zwarte overlay en daarbovenop wordt een witte tabel met randjes en data getoond. Deze nieuwe vensters kunnen wel 3 niveaus diep gaan. Elke keer komt er een overlay en een nieuw venster bovenop. De eigenaar pagina (de pagina die in de adresbalk staat dus) heeft maar een aantal scripts geladen, de standaard scripts. Omdat er soms wel 20 varianten van nieuwe vensters door ajax mogelijk zijn, kan ik de eigenaarpagina onmogelijk ALLE scripts voor die varianten laten laden (het kan natuurlijk wel, maar is enorme overload). Dus het liefst zou ik met Ajax de pagina + het benodigde (optionele) script voor die pagina ophalen ('die pagina' is dus zo'n 'nieuw venster').
Maar Ajax en JS hebben het zo afgesproken dat je geen <script>s kan laden met innerHTML setten... Ofzo. Dus als ik een pagina laad, waar <script>s in staan, en ik gooi m in zo'n overlay, heeft dat nieuwe venster geen enkel script geladen.
Ik heb ooit een manier gezien waarop dat wel gebeurde, waarschijnlijk met een zelf gefabriceerde setInnerHtml (oid) functie, die de script tags eruit haalde en op een andere manier (???) in de pagina laadde.

Heeft iemand er ervaring mee en een oplossing? Of kan iemand me in de goede richting schoppen? Heb het voor nu (ik hoop tijdelijk) opgelost met de scripts laden in de eigenaarpagina, maar daar staat nu dus een ENORME plakaat scripts (waarvan er veel niet nodig zijn :().

Enorm bedankt!
tv

Edit:
Ik heb de volgende functie gemaakt (js inladen nadat de pagina is geladen kan trouwens wel):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
function setInnerHTML(o,h) {
//alert((window.opera || navigator.product == 'Gecko'));
    var regex = /^([\s\S]*?)<script([\s\S]*?)>([\s\S]*?)<\/script>([\s\S]*)$/i;
    var regex_src = /src=["'](.*?)["']/i;
    var matches, id, script, output = '', subject = h;
    var scripts = [];
    while (true) {
        matches = regex.exec(subject);
        if ( !matches || !matches[0] ) {
            break;
        }
        subject = subject.replace(/(<script([\s\S]*?)>([\s\S]*?)<\/script>)/, '');
        var src_match = regex_src.exec(matches[2]);
        var src = null;
        if ( src_match && src_match[0] ) {
            src = src_match[1];
        }
        scripts.push([ matches[3], src ]);
    }
    var i = scripts.length, head = document.getElementsByTagName('head')[0];
    while ( i-- ) {
        var s = document.createElement('script');
        s.setAttribute( 'type', 'text/javascript' );
        // If 'src' attribute
        if ( scripts[i][1] ) {
            s.setAttribute( 'src', scripts[i][1] );
        }
        var id = 'ih_' + Math.round(Math.random()*9999) + '_' + Math.round(Math.random()*9999);
        s.setAttribute( 'id', id );
        head.appendChild(s);
        // If contents
//        if ( scripts[i][0] ) {
//            document.getElementById(id).innerHTML = scripts[i][0];
//        }
    }
    o.innerHTML = subject;
    return o;
}


Maar (natuurlijk) IE is het er niet mee eens... Runtime error in de laatste 3 gecommente lines. Je mag blijkbaar de INNERHTML niet setten als je het object zelf gemaakt hebt... Ofzoiets. JS die met SRC opgeroepen wordt, werkt wel, dus zo moet ik het voorlopig dan maar doen: ontelbaar veel kleine js bestandjes maken en laden.

Weet iemand hoe het wel kan met het script zelf, ipv de SRC te laden?? In FF werkt het wel gewoon perfect! Dank
Gewijzigd op 01/01/1970 01:00:00 door Rudie dirkx
 
PHP hulp

PHP hulp

08/12/2021 13:41:21
 
PHP Newbie

PHP Newbie

31/12/2007 03:11:00
Quote Anchor link
Ik was al even naar thickbox aan het kijken voor je, maar daarmee kun je niet meerdere div's over elkaar heen gooien.

Maar als jij je content ophaalt d.m.v. ajax, dan kun je toch gewoon zeggen:

<a href="javascript:openPagina('pagina.html');">

En de functie openPagina() zorgt er dan voor dat er een overlay over de pagina heen komt, met daarin jouw door ajax opgehaalde content. Dit kun je dan blijven herhalen, doordat de functie "openpagina" pagina onafhankelijk is.
 
Jelmer -

Jelmer -

31/12/2007 10:13:00
Quote Anchor link
script-elementen via javascript aanmaken om vervolgens te verwijzen naar externe script-bestanden mag wel. Echter, de 'innerHTML' van een script-element setten heeft geen zin. Als je rauwe code als javascript wilt laten uitvoeren, kijk dan eens naar de eval-functiede eval-functie.
 
Jan Koehoorn

Jan Koehoorn

31/12/2007 18:57:00
Quote Anchor link
Ik zat net nog even over dit probleem na te denken, maar ik neem aan dat je de nieuwe 'vensters' laadt n.a.v. een actie van de user, zoals klikken op een button of een link.

Is het dan niet het simpelst om gewoon namen van de JS scripts die je nodig hebt in de url te zetten van de hoofdpagina? Dan kun je op de betreffende subpagina's de goeie scripts laden via GET.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.