Avatar billede ilflue Nybegynder
25. september 2006 - 10:45 Der er 24 kommentarer og
1 løsning

Crossover med JavaScript

Hej.
Nu har jeg siddet og roddet med nogle javascript ting i en evighed, og jeg kan bare ikke få de browsere til at samarbejde.

Internet Explorer samarbejder 100% som den altid gør, opera er også rigtig rar at arbejde med, der dukker kun et problem op. Men Firefox skulle banlyses fra nettet, den vil ingenting.

Første problem ligger i både Opera og Firefox.
Det er selv justering af Iframe med scrollHeight. I Firefox og Opera justere den kun når den bliver større, men den krymper ikke sammen igen, hvis siden bliver mindre... I firefox kan man rette problemet ved at køre offsetHeight først, men det virker ikke i opera...

Et andet problem er at jeg ikke kan få Style="width:100%" til at virke i Firefox med input type="file" ... Alle andre inputs virker, bare ikke file....

Sidste problem er submit() i firefox.
parent.Frame.document.Execute.submit() virker hellere ikke i Firefox, men fint i alle andre....

Nogen der kan hjælpe med det her???
Avatar billede moocher Nybegynder
25. september 2006 - 11:47 #1
Jeg vil anbefale (har lige fået det og har hjulpet mig en del) at du henter en validator  den har flere gange fundet fejl ved mig hvor fejlen opstår pga funktionen ikke er kompatibel med alle browsere

http://users.skynet.be/mgueury/mozilla/

Og btw getfirefox.com - Rediscover The Net :)

Jeg skal dog ikke sige om det hjælper i lige din sag, men det kan være den finder noget
Avatar billede ilflue Nybegynder
25. september 2006 - 12:01 #2
Oki. Det er da et forsøg værd ihvertfald. Prøver lige...
Avatar billede olebole Juniormester
25. september 2006 - 12:30 #3
<ole>

Første problem forstår jeg ikke helt, hvad du mener med. Da det er noget med størrelsen, må jeg dog gå udfra, det skyldes resten af din kode ... hvad står der f.eks. før dit <html>-tag?

<input type="file"> er et meget specielt element, der er implementeret forskelligt i de forskellige browsere. Årsagen er, at det potentielt er et monster-farligt element - og de forskellige browser-leverandører har på hver deres måde forsøgt at komme udenom de værste problemer. Derfor er det forsdkelligt, hvad du kan med det i forskellige browsere.

Tredie problem kunne bl.a. skyldes, du kalder et element for 'Frame', der som bekendt er et reserveret ord i JavaScript  ;o)
Derudover synes adresseringen at være lidt sær - men det er ikke til at bedømme uden yderligere kode.

/mvh
</bole>
Avatar billede mclemens Nybegynder
25. september 2006 - 12:42 #4
1) Prøv at style til 0px højde først og
så style højden udfra scrollHeight bagefter
Avatar billede mclemens Nybegynder
25. september 2006 - 12:45 #5
3) Du har måske glemt name på din frame (name="Frame")
Avatar billede ilflue Nybegynder
25. september 2006 - 13:32 #6
Først *ole* det med Frame navnet. He he, det er bare et eksempel. Mit frame hedder Window_Frame, det var bare til at orintere om at det var et frame navn :) ...

Det første problem jeg mener, er at jeg har lavet en function i parent.top der skal justere mit Iframe efter document.scroll...  Jeg har placeret onload="ReSize()" i Iframe koden. Det virker også glimrende i alle browsere, lige med undtagelse at alle browsere på nær IE ikke vil formindske størelsen igen. Den resizer KUN hvis dokumentet jeg loader er større end Iframe højden, og ikke hvis det er mindre...

*mclemens* ... Har jeg deværre prøvet. Det virker kun hvis du smider en alert() ind imellem style 0px og scrollHeight koden... Tror jeg bliver lidt træls i længden :p

Ang. input file ... Er der ingen måde i Firefox at rette størelsen på den???
Avatar billede olebole Juniormester
25. september 2006 - 13:56 #7
"parent.top" ...? 'top' er også et reserveret navn i JavaScript - og derfor også en 'no-no' at bruge som identifier. "resize" er ligeledes et reserveret navn ... der findes allerede en metode på window-objektet med det navn  :)

"document.scroll" ...? Det er vinduet, der scroller ... ikke dokumentet.

I det hele taget er det ikke til at udtale sig om ret meget, når vi ikke kan se koden - og du ikke beskriver den nøjagtigt  :)
Avatar billede olebole Juniormester
25. september 2006 - 13:59 #8
- og nej, i FF kan du ikke ændre størrelsen på en type="file"
Avatar billede ilflue Nybegynder
25. september 2006 - 14:05 #9
parent.top mener jeg bare i top dokumentet.

Internet Explorer tager body størelsen, øvrige browsere tager Frame størelsen??? ...
Hvordan får jeg så størelsen på dokumenten i framet???
Avatar billede mclemens Nybegynder
25. september 2006 - 14:06 #10
2) Et hurtigt scriptet eksempel (ikke optimeret helt)
... jeg er på arbejde og er først hjemme iaften
(14->17 er jeg normalt offline ...)


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
.inputfil{width:700px;background:#f00;}
</style>

<script type="text/javascript">

  inpfilewidth=700;

  var ie=((document.all) && (navigator.userAgent.indexOf('Opera')== -1));

window.onload=function(){
  if(!ie){
    a1=document.createElement("div");a1.style.height="0px";a1.style.overflow="hidden";
    a2=document.createElement("input");a2.type="text";
    a3=document.createElement("input");a3.type="text";a3.value="Gennemse...";
    a1.appendChild(a2);a1.appendChild(a3);document.body.appendChild(a1);
    j=1;while(a2.offsetWidth<inpfilewidth)a2.size=++j;
    k=1;a2.size=1;while(a2.offsetWidth<a3.offsetWidth)a2.size=++k;

    inps=document.getElementsByTagName("input");
    for(i=0,i2=inps.length;i<i2;i++){
      if(inps[i].className=="inputfil")inps[i].size=j-k;
    }
  }
}
</script>

</head><body>
<input type="file" class="inputfil">
</body></html>




[ *mclemens* ... Har jeg deværre prøvet. Det virker kun hvis du smider en alert() ind imellem style 0px og scrollHeight koden... Tror jeg bliver lidt træls i længden :p]
Evt. kan du splitte op og køre en setTimeout("funktionennr2();",10); //ved ikke hvor mange ms. der er nødvendig - med du kan teste ( ala' det samme problem som herinde http://www.eksperten.dk/spm/734023 )
Avatar billede olebole Juniormester
25. september 2006 - 14:10 #11
"parent.top mener jeg bare i top dokumentet." ... ja, det er ret svært at rette på noget, når du skriver en masse, som du ikke mener. Prøv med et link til siden i stedet for  ;o)
Avatar billede ilflue Nybegynder
25. september 2006 - 15:14 #12
*mc*, det virker fint med delay. der skal ikke mere end 1ms til at gøre tricket...

function iFrameHeight(jvsTime) {

  var a = document.getElementById('Index_Frame');

  if(a.Document) jvsTime = true;
  else a.style.height = 0;

  if(jvsTime) {
    a.style.height = parent.Index_Frame.document.body.scrollHeight;
  }
  else setTimeout("iFrameHeight(true)",1);
}

Og så har jeg fjernet delayet fra internet explorer. Den hakkede for meget i det, desuden har den hellere ikke brug for det. Så nu virker lortet i IE, Netscape, Opera og Firefox :)

*ole* Kan jeg ikke. Har ikke adgang til at åbne port 80 udtil.

Men den der submit ting... Nogen ide til hvorfor firefox afvise den???

jeg har sat navn i min <form>, og jeg mener da jeg har brug document.FormNavn.submit() i firefox før???
Avatar billede olebole Juniormester
25. september 2006 - 15:20 #13
Så snart en style-værdi er forskellig fra 0, _skal_ enheden angives ... f.eks:
    a.style.height = parent.Index_Frame.document.body.scrollHeight + "px";

Nu kan jeg ikke se din kode, men adresseringen, du viser i spm'et er højest sandsynlig ikke korrekt. Et (par) bud kunne være:
    parent.frames.Index_Frame.document.Execute.submit();

- eller:
    frames.Index_Frame.document.Execute.submit();'

- men det er som sagt ikke til at vide, når jeg ikke ved præcist, hvordan tingene hænger sammen  :)
Avatar billede olebole Juniormester
25. september 2006 - 15:23 #14
Husk også at JS er case-sensitive. Derfor skal der ikke stå:
    if(a.Document) jvsTime = true;

- men:
    if(a.document) jvsTime = true;

- og nej, tingene _kan_ ikke virke i FF med de fejl, jeg nævner i dette og sidste indlæg  :)
Avatar billede ilflue Nybegynder
25. september 2006 - 15:56 #15
Nej det kan være svært at fejl finde ud i den blå luft. Mmm....

Der er for meget til at smide ind her, men kan lige smide de ting ind som hænger sammen med problemet, så håbe det er nok.....

I min default side, den uden for alt der har med frames, og Iframes at gøre.
Den som man i JavaScript vil linke til ved hjælp fra parent.top.
Der har jeg et Iframe til at ligge, sammen med mine menu links. Og selv. banner osv... Iframet er bare til alm. index_frame brug. Samtidig har jeg et andet Iframe, som normalt er skjult. Det er bygget op med tabeller som et slags vindue, og i den tabel har jeg en submit knap liggende, som skal bruges til samtlige <form> i det skjulte Iframe.

  function Post_Form(strAction) {
    parent.Index_Frame.document.Execute.action = strAction;
    parent.Index_Frame.document.Execute.submit();
<input type="submit" value="Action" onClick="java script:parent.Hidden_Frame.document.Execute.submit();">

Grunden til at den ligger hvor den ligger, er at den ikke skal scolle med siden ned i Iframet. Og det virker også i samtlige browsere, bare ikke firefox
Avatar billede ilflue Nybegynder
25. september 2006 - 15:57 #16
Ja det ved jeg godt. Document med stort er MS lamme udgave af contentDocument, Bare for at være anderledes...
Avatar billede ilflue Nybegynder
25. september 2006 - 15:59 #17
Hmm. Læste det ikke helt odenligt. Jeg bruger a.Document til at sikre at det er MS Explorer. Grunden er at MS Explorer IKKE behøver at bruge den setTimeout nedenfor.
Avatar billede mclemens Nybegynder
25. september 2006 - 17:50 #18
En måde at (måske) finde ud af hvad FF ikke kan lide er at:

1) Åbne FF trykke på menupunktet Funktioner
- og så vælge javascript konsol - og ryd

2) Gå ind på din side og tryk på knappen

3) Åben javascript konsollen igen og se hvad den melder fejl
på (marker evt kasser og tryk ctrl-c og post det herinde)

(((... det er som Ole siger svært at vurdere hvad årsagen er  ... om det er fordi at du ikke ryger nok op i niveau eller hvad årsagen er (parent.parent.Hidden_Frame. ... / top.top.Hidden_Frame. ...)))




... M.h.t. checket på IE kan du måske:

function iFrameHeight(jvsTime) {

  var a = document.getElementById('Index_Frame');

  if((document.all) && (navigator.userAgent.indexOf('Opera')== -1))jvsTime = true;
  else a.style.height = 0;

  if(jvsTime) {
    a.style.height = parent.Index_Frame.document.body.scrollHeight+"px"; //som nævnt af Ole
  }
  else setTimeout("iFrameHeight(true)",1);
}
Avatar billede ilflue Nybegynder
25. september 2006 - 17:58 #19
M.h.t iFrameHeight, så virker den kode med setTimeout jeg lagde ind før perfekt.
a.style.height skal bare sættes til 1 frem for 0, ellers kokser opera. Men alle 4 browsere gør lige hvad de skal nu :D

Ang. den submit, så fandt du problemet for længe siden.
Klovn som jeg, så manglede jeg selv Name="" ... Jeg havde kun id=""
Har bare ikke tænkt på det, fordi parent.framename virker i både IE, Netscape og opera uden name tag. Vidste jeg ikke, så regnede med at den var der...

Det kan være svært nok at rette folks koder når man sidder med dem, og endnu værre når man ikke har en anelse om hvordan lortet er bygget op. Dig og Ole skal have tak for hjælpen :)  Det er rart når tingene virker.
Avatar billede ilflue Nybegynder
25. september 2006 - 17:59 #20
Sry. Firefox kokser hvis height sættes til 0
Avatar billede mclemens Nybegynder
25. september 2006 - 18:47 #21
Ok, enkelte browsere strikker et sikkerhedsnet ud under os kodere
- til tider er der rart nok, men når man så skal stå gå på line med
en browser uden det sikkerhedsnet, kan det være svært at finde de
bugs, der gør, at den browser så ikke vil lege med - jeg foretrækker,
så at man ikke havde så elastisk et sikkerhedsnet i dom'en, men sådan
er det jo :/ (uden sikkerhedsnet vil man opdage en smutter i koden hurtigt :) )

Eksempel på sikkerhedsnettet:
(som dog er ujævnt terræn, da det brister hvis to
elementer deler samme name som den anden har id ...
Har ikke testet den i andet end IE og FF - men FF kører
ikke med det sikkerhedsnet :) )

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title><script type="text/javascript">

window.onload=function(){
alert(document.getElementById("fejlingenid").value);
alert(document.getElementsByName("fejlingenname")[0].value);
alert(document.getElementById("fejlingenid").value);
}
</script></head><body><input type="text" name="fejlingenid" value="Nogle browsere strikker sikkerhedsnettet i dom">

- name="fejlingenid" første alert: getElementById("fejlingenid")
<br><br><br>

<input type="text" id="fejlingenname" value="De forstår så ikke forskel på name ogordentligt forskel på name og id mere">

- id="fejlingenname" anden alert: getElementsByName("fejlingenname")[0]
<br><br><br>



<input type="text" id="fejlingenid" value="Og så kikser sikkerhedsnettet til tider hvis denne alert ikke kommer - den kommer dog i FF">

- id="fejlingenid" sidste alert: getElementByIde("fejlingenid") <br>IE kikser denne da den har overbevist sig selv om at getElementById("fejlingenid") skal referere til første input med name="fejlingenid" ... og derfor kommer med den første alert to gange :/ ... aha </body></html>







( men andre gange kan tingene virke meget trals - som den besværlige måde at forsøge
at rette width på input felter, der er af typen file, 25/09-2006 14:06:52 )
... og FF er bestemt ikke bug fri heller ...



Her er lige et svar :o)
Avatar billede ilflue Nybegynder
25. september 2006 - 19:38 #22
Ja det net kan være ret træls.
Oplevede det samme i går med IE, da jeg havde lavet et css stykke der hed color:"#000000";
Latterlig fejl at lave, men så den ikke, og IE kørte lige hen over fejlen. Når man så har kopiret den samme kode i 20 andre dokumenter, og så starter Opera og Firefox op for at teste det deri, så kan man begynde at rette alle 20 dokumenter igennem, hvor man normalt ville se fejlen allerede ved første dokument.

Men takker for hjælpen igen :)
Avatar billede mclemens Nybegynder
25. september 2006 - 19:55 #23
[ så kan man begynde at rette alle 20 dokumenter ] Yes, har
selv prøvet noget i den stil selv - det var øv, øv og atter øv :D

Velbekom, og tak for point :)

...

Olebole, du nåede ikke at lægge et svar så jeg
ved ikke om du ville have været med på deleren ?
Har lige lagt 80 her: http://www.eksperten.dk/spm/734580
Avatar billede olebole Juniormester
26. september 2006 - 10:36 #24
Sorry ... havde desværre lidt travlt, så jeg nåede aldrig videre  ;o)
Avatar billede mclemens Nybegynder
26. september 2006 - 10:50 #25
Helt ok, løsningerne på problemet var (1) 12:42:51
(dog med 1px istedet), (3) 12:45:48 og (2) 14:06:52 :)
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