cloneNode add onclick to body of IFrame appendChild

Status
Niet open voor verdere reacties.

Snarffy

Gebruiker
Lid geworden
23 okt 2009
Berichten
35
Geacht Forum,

ik heb een probleem met cloneNode en wel het volgende :

ik heb een div met daarin een Iframe.

Wil deze div inclusief IFrame dupliceren d.m.v. cloneNode en dan voordat ik het append een onclick toevoegen aan de body, ben al enkele uren bezig maar kan niet echt een oplossing vinden.

Als ik dit achteraf na de appendChild wil realiseren moet ik wat met een settimeout gaan doen en dat wil ik eigenlijk niet.


Is er iemand die daar een oplossing voor heeft, dan hoor ik het graag !

Met vriendelijke groet,

Snarffy
 
Met 'body' bedoel je de body van de pagina die geladen wordt in het iframe neem ik aan? Het probleem is dat je iframe pas geladen wordt wanneer je het append aan de pagina waar je op werkt (iframe toevoegen aan een element dat nog niet op je main-pagina staat werkt helaas ook niet). Voordat je dat doet bestaat de body van het document in je iframe dus nog helemaal niet, en daarom kun je nog geen event-listeners toevoegen.

Ik denk dat dit het dichtst in de buurt komt van de oplossing waar je naar op zoek bent:
[JS]var iframe = otherIframe.cloneNode(/* args */);
iframe.onload = function() {
iframe.contentDocument.body.onclick = someFunction;
};
someElement.appendChild(iframe); //document in iframe gaat nu pas geladen worden[/JS]

Groetjes, Robin :)
 
Laatst bewerkt:
Beste Robin,

bedankt voor je antwoord.

Je hebt inderdaad gelijk met de body, dat is de body van de te laden pagina. Hetgeen jij voorstel had ik ook al uitgeprobeerd, het is zo dat er dan toch weer een vertraging in moet zitten zet je een "alert" (of een settimeout gebruiken) in de functie dan is er geen probleeem. Doe je dat niet dan krijg ik een foutmelding. Jij zegt dat de body in het iframe niet bestaat voor de appendChild, daar kan je best gelijk in hebben alleen is het wel vreemd dat hetgeen (<pre>...</pre>) ik in de gecloonde iframe had staan wel met de append weggeschreven wordt. Die "<pre>...</pre>" staat wel in de <body>..</body>.

Met vriendelijke Groet,

Snarffy
 
Laatst bewerkt:
En wat voor fout krijg je dan te zien? Ik kan 'm niet reproduceren. Heb je misschien het stukje code dat de fout produceert? In die onload-functie zou het gehele (gecloonde) document namelijk gewoon klaar moeten zijn, zonder dat er nog extra vertraging nodig is.

Dit is mijn testcode:

index.htm
HTML:
<html>
    <head>
        <script type="text/javascript">
        
            function someFunction() {
                console.log(this.innerHTML);
            }
            function main() {
                
                var someIframe = document.getElementById("someIframe");
                var newIframe = someIframe.cloneNode();
                newIframe.onload = function() {
                    someFunction.call(this.contentDocument.body);
                    this.contentDocument.body.onclick = someFunction;
                };
                document.body.appendChild(newIframe);
                
            }
            window.onload = main;
        
        </script>
        <title></title>
    </head>
    <body>
        <iframe id="someIframe" src="test.htm"></iframe>
    </body>
</html>

test.htm:
HTML:
<html>
    <head>
        <title></title>
    </head>
    <body>
        <div>SomeText...</div>
    <body>
</html>
 
Hallo Robin,bedankt voor je antwoord.

Hieronder de kode welke ik nu gebruik, ik had eerder een onload gebruikt welke toch nog een foutmelding gaf. Met deze kode krijg ik echter geen foutmelding, behalve dan dat de scale van m'n <pre>..</pre> gereset is en de naam van deze "pre" verdwenen is dit komt door de toevoeging van "iFrame.onload=function () {SubOnLoad();};" !

HTML:
function SubOnLoad () {

        	iFrame.contentDocument.body.childNodes[0].id='kloon_'+iFrame.contentDocument.body.childNodes[0].id;
	iFrame.contentDocument.body.onclick=
		    function () {SubNormaleProporties(document.getElementById(kloon.id).parentNode.id,TypeFile);};

}

var iFrame='';
function SubAppendChild() {
	root=document.getElementById("Laag0");
	if (TypeFile=='txt') {
		kloon = foo.cloneNode(false);
		kloon.style.position='absolute';
		kloon.style.left=foo.parentNode.offsetLeft +'px';
		kloon.style.top=foo.parentNode.offsetTop +'px';
		kloon.id=kloon.title='kloon_'+foo.id;
		kloon.style.zIndex="auto";
 		root.appendChild(kloon);

		root=document.getElementById('kloon_'+id);
		iFrame=foo.childNodes[1].cloneNode(false);
        	              iFrame.id='kloon_'+iFrame.id;
		iFrame.onload=function () {SubOnLoad();};
 		root.appendChild(iFrame);
	}
}

Heb jij nog aanbevelingen voor het gebruik van contentWindow en contentDocument ?

Met vriendelijke groet,
Snarffy
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan