[Dhtml] iframe & html overhevelen

Pagina: 1
Acties:

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Topicstarter
Ik ben samen met papa_eend naar aanleiding van dit topic op een joekel van een probleem gestoten. Via een iframe hack zetten we content over naar een pagina zonder reloads (op oreilly heeft deze truuk zelfs al een officiele naam gekregen :D ) maar nu gaat het volgende dus fout,

in de content staat wat javascript die in het hoofddocument uitgevoerd moet worden, en dus nog niet als die in het iframe gebufferd wordt. Wat wij bedachten is dat we die code gewoon in een functie zetten die pas aangeroepen wordt als de content overgeheveld is, maar nou blijkt de code gewoon fysiek niet te bestaan, en is dan ook niet aanspreekbaar, terwijl het wel degelijk deel is van de content en ook meegaat naar de uiteindelijke plaats.

Zelfs als er alleen een alert() in een script blok staat wordt deze maar 1 keer uitgevoerd (vanuit het iframe) en niet een 2e keer als de content geWrite wordt naar zijn uiteindelijke plek.

Is dit een Bug van IE? of is dit een security issue? of zit het hem erin dat het geen script "is" als het met innerhtml wordt geschreven?

want wij snappen het ff niet meer :D We zijn trouwens wel wat anders aan het proberen nog, maar dat is een vieze workaround :{

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

of zit het hem erin dat het geen script "is" als het met innerhtml wordt geschreven?
een <script> writen in een layer met innerHTML heeft toch nooit gewerkt?

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Topicstarter
ow? * Clay heeft dat nog nooit nodig gehad.

maar dat is toch dom? waarom zou dat niet werken. :{

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Kweenie.. lijkt me iets dat parse-time uitgevoerd wordt en niet meer dynamisch.. maar ik ga ff proberen.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

code:
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<script type="text/javascript">
function writeScript(){
    document.body.innerHTML="<scr"+"ipt type='text/javascript'>alert('test');</scr"+"ipt>";
}
</script>
</head>
<body onload="writeScript()">

</body>
</html>

werruk nie (heb het nog iets uitgebreid maar zo simpel werkt het dus niet)

Wat mogelijk wel werkt is via het DOM een script-element toevoegen met het script als innerHTML?? Maar dan ben je je xbrowser compatibiliteit kwijt :(

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Maar dit werkt wel...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<head>
<script type="text/javascript">
function writeScript(){

    document.1.open();
    document.1.write("<scr"+"ipt type='text/javascript'>alert('test');</scr"+"ipt>Blaat");
    document.1.close();
}
</script>
</head>
<body onload="writeScript()">
<div id="l"></div>
</body>
</html>

Programmer - an organism that turns coffee into software.


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Netscape reparset het document blijkbaar. Iets wat lgoischerwijs ook getrigegred wordt aangezien je het hele document opent en sluit..

innerHTML is niets meer dan een content-eigenschap.

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Topicstarter
Maar als je dynamisch elk willekeurig html element kan toevoegen of weghalen, waarna de document object tree wordt geupdate, dan kan je toch ook wel een stukkie script toevoegen of weghalen. dan komen er gewoon wat methoden of variabelen bij, ik zie de logica niet waarom dat niet zou kunnen.

je kan immers ook op elk willekeurig moment
code:
1
2
3
dinges = new function() {
   // code
}

doen.

wellicht dat dat ook de oplossing is. Vanuit de iframe:
code:
1
2
3
parent.naampje = new function() {
  // bladie
}

wat dan na het overhevelen van de content uitgevoerd wordt.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Topicstarter
...
innerHTML is niets meer dan een content-eigenschap.
maar het verandert wel degelijk eigenschappen van andere elementen. als die er mogelijk door beinvloed raken. Een paar block elementen die je met innerHTML van andere content voorziet doen elkaar immers ook van plaats veranderen. Dus er gebeurt wel wat over je hele document heen.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Hmm.. voordat je het gaat proberen:

insertAdjacentHTML en createElement("script") werken ook nie

Nou je hier toch ben :P Check deze topic nog ff van tijdens je vakantie:

[topic=446092/1/25]

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

* SchizoDuckie heeft weer eens een leuk probleem bedacht :P :X


[edit]

Ik heb zojuist even proberen te rommelen met var parent.functieNaam = new Function("alert('blaat!')");

dit werkt, zie hier
(eerst 'prijslijst' klikken, dan op 'run script')

maar zodra ik dan die run script link aanklik met de code die er in móet staan, doet ie weer net alsof ie gek is, en zegt ie dat ie dynObject weer niet kan vinden :(

Stop uploading passwords to Github!


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

*nog meer wazigheid*

om het geheel wat sneller te laten laden heb ik die irri flash intros ff weggeskipt.

check de 'intro' link.

deze laadt ook een functie. die werkt.

maar als je dan een andere link in die layer laadt, dan is inene z'n functie weg!

da's toch niet de bedoeling :?

Stop uploading passwords to Github!


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Topicstarter
yup, dat heb ik hier ook dus :{ een aangemaakte methode is op een gegeven moment weer foetsie als je iets anders gaat inladen, lekker handig.
Zodra de iframe andere content krijgt zal de browser wel denken dat het niet meer nodig is om te onthouden ofzo, op zich wel logisch, maar toch ook weer niet. Je maakt het object immers buiten het iframe aan.

Wat dan nog vreemder is is dat de functie als object toch nog wel een soort van blijft bestaan.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

Op dinsdag 26 maart 2002 19:38 schreef Clay het volgende:
yup, dat heb ik hier ook dus :{ een aangemaakte methode is op een gegeven moment weer foetsie als je iets anders gaat inladen, lekker handig.
Zodra de iframe andere content krijgt zal de browser wel denken dat het niet meer nodig is om te onthouden ofzo, op zich wel logisch, maar toch ook weer niet. Je maakt het object immers buiten het iframe aan.

Wat dan nog vreemder is is dat de functie als object toch nog wel een soort van blijft bestaan.
WEIRD!

en... als je die functie als prototype meegeeft?

[edit] prototype werk niet... maar dit wel:
code:
1
2
3
<script>
    window.parent.runScript = new window.parent.Function("alert('blaat!');");
</script>

Stop uploading passwords to Github!


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

en... als je die functie als prototype meegeeft?

[edit] prototype werk niet... maar dit wel:
prototype is voor het aanpassen van het 'instantie-prototype' zeg maar.. En aangezien je nergens een instantie van maakt is prototype nogal nutteloos.

Tenzij je het van het Iframe-object doet. Dan zou je ieder iframe een set standaard methodes mee kunnen geven, bijvoorbeeld met referenties naar je dynObject. Idee?

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Topicstarter
Dat zou misschien ook werken idd. Ik denk dat deel van het probleem is dat het object wat je maakt inderdaad een deel van het document in het iframe is, en ook al "maak" je dan dingen met parent.dinges blijft het bij het iframe horen. dinges in de parent is dan niets meer dan een referentie naar het object in het document in het iframe.
Misschien dat je het object naar het hoofddocument kan "kopieren" met for(bla in object) { ... }
prototype werk niet... maar dit wel:
code:
1
2
3
<script>
    window.parent.runScript = new window.parent.Function("alert('blaat!');");
</script>
ook eens ff mee poken dan :)

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin

Pagina: 1