[JS] Probleem met IFRAME en Stylesheets

Pagina: 1
Acties:

  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Ik heb het volgende probleem:

In Firefox of IE creër ik een IFRAME, met daarbinnen in de head een LINK element voor de stylesheet.

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
function ajaxIFrameSuggestDocument() {
    iframeSuggest = document.getElementById('iframe.ajaxsuggest');
                
    if (iframeSuggest.contentDocument) { // For NS6
        return iframeSuggest.contentDocument;
    } else if (iframeSuggest.contentWindow) { // For IE5.5 and IE6
        return iframeSuggest.contentWindow.document;
    } else if (iframeSuggest.Document) { // For IE5
        return iframeSuggest.Document;
    }
}
        
function ajaxSuggestPrepareIFrame() {
    var iframeSuggest;
    var iframeSuggestDocument;
        
    var iframe = document.createElement('iframe');
    iframe.id = 'iframe.ajaxsuggest';
    iframe.scrolling = 'no';
    iframe.frameBorder = 0;
    iframe.src = 'javascript:;';
    iframe.style.position = 'absolute';
    iframe.style.visibility = 'hidden';
    document.getElementsByTagName('body')[0].appendChild(iframe);

    var link = document.createElement('link');
    link.href = '<%=request.getContextPath()%>/main/global/css/suggest.css';
    link.rel = 'stylesheet';
    link.type = 'text/css';
    ajaxIFrameSuggestDocument().getElementsByTagName('head')[0].appendChild(link);
        
    isSuggestIFramePrepared = true;
}


Deze code creërd prima de IFRAME en de LINK element in de IFRAME, echter de Stylesheet wil niet geladen worden door Firefox en IE.

Als ik elementen creër die gebruik maken van de stylesheet dan worden deze zonder opmaak weergegeven.

Als ik met de DOM inspector van Firefox kijk dan is alles goed.
Wee iemand waarom dit niet werkt?

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Foutje? ;) Javascript hoort in Webdesign & Graphics. :)

PW>>WG

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Je genereert elementen in de scope van je ene document, en probeert die te appenden in een ander document; dat kan volgens mij niet. Verder lijkt het er op dat IE bij een leeg document enkel een HTML node heeft zonder head of body wat ook nog eens een probleem op zou kunnen leveren.
Ik heb zelf al zitten puzzelen, maar tot nog toe zonder echt resultaat; ik zie het link-element in de DOM inspector ook niet terug.

Intentionally left blank


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

ah, met een timeout werkt het:
JavaScript:
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
function ajaxIFrameSuggestDocument()
{
    var iframeSuggest = document.getElementById('iframe.ajaxsuggest');

    if (iframeSuggest.contentDocument)
    {
        // For NS6
        return iframeSuggest.contentDocument;
    }
    else if (iframeSuggest.contentWindow)
    {
        // For IE5.5 and IE6
        return iframeSuggest.contentWindow.document;
    }
    else if (iframeSuggest.document)
    {
        // For IE5
        return iframeSuggest.document;
    }
}
        
function ajaxSuggestPrepareIFrame()
{        
    var iframe = document.createElement('iframe');
    iframe.id = 'iframe.ajaxsuggest';
    iframe.scrolling = 'no';
    iframe.frameBorder = 0;
    iframe.src = 'about:blank';
//  iframe.style.position = 'absolute';
//  iframe.style.visibility = 'hidden';
    document.getElementsByTagName('body')[0].appendChild(iframe);

    setTimeout('next()', 100);
}

function next()
{
    var link = ajaxIFrameSuggestDocument().createElement('link');
    link.rel = 'stylesheet';
    link.type = 'text/css';
    link.href = 'http://localhost/suggest.css';
    ajaxIFrameSuggestDocument().getElementsByTagName('head')[0].appendChild(link);

    var p = ajaxIFrameSuggestDocument().createElement('p');
    p.className = 'bla';
    p.appendChild(ajaxIFrameSuggestDocument().createTextNode('tralala'));
    ajaxIFrameSuggestDocument().getElementsByTagName('body')[0].appendChild(p);
}

:)

Intentionally left blank


  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
@crisp:

Je kan inderdaad elementen in het ene document creëren en in het andere document invoegen.
En een IFRAME creëren levert in Firefox in iedergeval de standaard html, head en body elementen.

Ik zal eens naar die timeout kijken.
Bedankt.

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line