Avatar billede lajer Nybegynder
08. december 2004 - 22:04 Der er 20 kommentarer og
2 løsninger

Fange id el. name på en iframe, fra det åbnede dokument

Hej E

Jeg står med en mindre problemstilling, som jeg ikke syntes at kunne finde en løsning på.

Jeg har en iframe, som bliver dynamisk genereret af javascript. Denne iframe åbener (dah!) et dokument. Fra dette dokument vil jeg gerne kunne fange iframens id eller name? - Eller for den sags skyld, hvilken som helst anden property, som jeg kan identificere denne iframe med.

Nogen forslag?

På forhånd tak.


Mvh
Torben
Avatar billede Slater Ekspert
08. december 2004 - 22:05 #1
Kan du ikke bruge window.opener ?
Avatar billede lajer Nybegynder
08. december 2004 - 22:11 #2
Mig bekendt er opener hvis man åbner et nyt vindue...

Men jeg prøver da alert(window.opener.id);

Det gav en fin exception :-(
Avatar billede Slater Ekspert
08. december 2004 - 22:19 #3
Beklager, jeg misforstod. Jeg troede at iframen åbnede et vindue.

Vil du så have id/name på det iframe-objekt der indeholder den nuværende side? I så fald er det jo bare this.id eller this.name ... Misforstår jeg stadig? :s
Avatar billede lajer Nybegynder
08. december 2004 - 22:25 #4
Det var også min umiddelbare tanke. Men der for jeg undefined.

Jeg smider lige den del der generere iframen:

var oIframe = document.createElement("iframe");
oIframe.src = obj.href;
oIframe.height = obj.height;
oIframe.width = obj.width;
oIframe.frameborder = 0;
oIframe.scrolling = "auto";
oIframe.marginwidth = 0;
oIframe.marginheight = 0;
oIframe.id = "iframe_" + sheetEngine.actualSheet.id;
oIframe.name = "iframe_" + sheetEngine.actualSheet.id;

Som du kan se, så for oIframe både et id og et name. Men lige meget hjælper det.
Avatar billede olebole Juniormester
08. december 2004 - 22:30 #5
<ole>

Det lyder afgjort som en uhensigtsmæssig løsning, men du må kunne bladre hovesidens frames-array igennem og lave en sammenligning. Noget à la:

var foundFrame = null;
for (i=0; i<parent.frames.length; i++) {
  if (parent.frames[i]==window) foundFrame = parent.frames[i];
}

... så vil jeg mene, du brude have en reference til iframe'en i 'foundFrame' ... Prøv  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
08. december 2004 - 22:33 #6
En anden mulighed kunne være at sende ID'en med i URI'en:

var oIframe = document.createElement("iframe");
oIframe.height = obj.height;
oIframe.width = obj.width;
oIframe.frameborder = 0;
oIframe.scrolling = "auto";
oIframe.marginwidth = 0;
oIframe.marginheight = 0;
oIframe.id = "iframe_" + sheetEngine.actualSheet.id;
oIframe.name = "iframe_" + sheetEngine.actualSheet.id;

oIframe.src = obj.href+"?id="+oIframe.id;

... og både i dette og dit eget skal 'oIframe' jo append'es et eller andet sted i dokumentet  ;o)
Avatar billede lajer Nybegynder
08. december 2004 - 22:44 #7
Hej Ole.

Første idé var fin. Nummer 2 hælder jeg ikke meget til. Så skal jeg til at holde styr på querystringen og den skal egentlig helst passe sig selv ;-)

Men, jeg for godt nok fint et object med din metode. Jeg kan bare ikke komme længere her. Hvis jeg tager .id på dette object, for jeg undefined. Det samme gør jeg på .name osv.

Lidt spøjst. Men måske er der noget jeg overser?
Avatar billede Slater Ekspert
08. december 2004 - 22:47 #8
Jeg har lige prøvet med this.id og this.name, og det virker fint her. Er du sikker på den HAR et id og name? ved godt det er et dumt spørgsmål, men det er da mystisk.
Avatar billede lajer Nybegynder
08. december 2004 - 22:50 #9
viperine... WHAT? - jamen, så er der jo håb forude :)

Ja, jeg er helt sikker på at der er et id og name... Men for pokker da også. Meget suspekt.

Kan jeg ikke logge dig til at smide noget kode på dit eksempel. Måske har jeg lavet en grum fejl 40 og stirret mig blind på problemet.
Avatar billede Slater Ekspert
08. december 2004 - 22:59 #10
Nu tror jeg jeg ved hvad forskellen er. Jeg kan ikke få fat i et ID, men godt et NAME.

Jeg lavede et par ekstremt simple sider.

Først test.html, der indeholder:

<script language="javascript">
document.write('<iframe name="namehest" id="idhest" src="hest.html">');
</script>

og så hest.html:

<script language="javascript">
alert( this.name ); // viser "namehest"
alert( this.id ); // viser "undefined"
</script>
Avatar billede lajer Nybegynder
08. december 2004 - 23:03 #11
Ja, nu bliver det så endnu mere underligt.

For hvis jeg gør som dig og "hardcoder" name attributen direkte på. Så spiller det fint. MEN, hvis jeg gør som jeg viste tidligere, hvor jeg laver en createElement og sætter properties herpå, så spiller det bare ikke... MEGET underligt.
Avatar billede olebole Juniormester
08. december 2004 - 23:06 #12
Der er væsentlig forskel på at tilgå en (i)frame med 'name' eller 'id'. Med 'name' får du fat i window-objektet ... med 'id' faår du fat i HTML-elementet. Det første har en href-property - det sidste en src-property  ;o)
Avatar billede olebole Juniormester
08. december 2004 - 23:08 #13
... og dokumentet i iframe'en kender sit eget window-objekt - men ikke det HTML-element i enden side, der opretter window-objektet.
Det er med at holde tungen lige i bukserne, her  ;o)
Avatar billede olebole Juniormester
08. december 2004 - 23:09 #14
Vi prøver lige det samme på dansk  :D

... og dokumentet i iframe'en kender sit eget window-objekt - men ikke det HTML-element i en anden side, der opretter window-objektet.
Avatar billede olebole Juniormester
08. december 2004 - 23:15 #15
Var det overhovedet til at forstå?
Iframe'ens manifestation som et window-objekt har ikke en 'id', men et 'name'.
Det HTML-element, der opretter iframe'ens window-objekt har derimod et 'name' og et 'id'.
Avatar billede lajer Nybegynder
08. december 2004 - 23:17 #16
ole

God forklaring og stof til eftertanke. Tak for det.

Imellemtiden har jeg løst problemet. Det viser sig at man kan hente id'et såre simpelt: window.frameElement.id

Ja, jeg har mest lyst til at bande og svovle over de sidste mange timer. Men alt er godt nu ;-)

Tak for indsatsen begge to. Smid nogle svar.
Avatar billede olebole Juniormester
08. december 2004 - 23:21 #17
... selvtak  ;o)
Avatar billede Slater Ekspert
08. december 2004 - 23:25 #18
...stadig mystisk.
Avatar billede olebole Juniormester
08. december 2004 - 23:35 #19
... ikke spor. Hvad er det, du ikke forstår?
Avatar billede Slater Ekspert
08. december 2004 - 23:42 #20
Dette:

"For hvis jeg gør som dig og "hardcoder" name attributen direkte på. Så spiller det fint. MEN, hvis jeg gør som jeg viste tidligere, hvor jeg laver en createElement og sætter properties herpå, så spiller det bare ikke"
Avatar billede olebole Juniormester
08. december 2004 - 23:57 #21
Ahaa ... det er blot fordi, IE - som på så mange andre punkter - er en elendig browser. Det fungerer fint i Moz ... og det bør det da også  :)
Avatar billede olebole Juniormester
09. december 2004 - 00:08 #22
... iøvrigt er det en rigtig god idé at sætte attributter med funktionen, der er beregnet til det - ikke mindst, når vi forhåbentlig snart skal til at scripte under XHTML:  OBJECT.setAttribute("name", "EtEllerAndetNavn");
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester