För att få in det på huvudsidan tillkommer ytterligare trubbel, inte bara är target-framen i en dubbel iframe, menyn ligger i en annan, som ligger i ytterligare en...
Så här tror jag att du kan få koden att fungera:
var pwin=parent.parent.frames['widget3-frame'].frames['meny']; var links=pwin.document.getElementById("container").getElementsByTagName("a"); for(var i=0;i<links.length;++i){ if(links[i].href.charAt(0)!='#') links[i].onclick=function(){pwin.parent.parent.frames['widget2-frame'].frames['inforuta'].capLinks(this.href);return false;} }
Observera att för att få det att fungera måste du sätta ett name="" på din meny-frame, som ligger i "widget3". Det skulle med den här koden kunna bli lite problem med att den första fade:n inte uppkommer. Det beror på att menyn laddar EFTER att scriptet har kört (ytterligare en anledning att avhålla sig från frames, om man kan). Så här kan man göra för att lagra klar-status i parent, och köra koden när båda frame:arna har laddats:
I fadepage.js:
Ta bort koden vi skrev om tidigare, och skapa en function högst upp i scriptet med innehållet:
function fixLinks(){ //[ Koden ] }
Där borttagning skedde, lägg istället till:
parent.parent.fixLinks(window);
På meny-sidan:
Lägg till onload="parent.parent.fixLinks(1);" i <body>
Det är inte helt säkert att det behövs, men den borde fixa problem som kan uppkomma. Koden är otestad, men kan fungera ;)
Hoppas det löser sig.
Simon
Och nu kommer problemet med att feta in detta på huvudsiadan.
Har gjort föjande justeringar:
var links=parent.document.getElementById("container").getElementsByTagName("a"); //Lagt till "parent." framför. var pwin=parent.parent; for(var i=0;i<links.length;++i){ if(links[i].href.charAt(0)!='#') links[i].onclick=function(){pwin.frames['widget2-frame'].frames['inforuta'].capLinks(this.href);return false;} }
Har även testat parent.parent.document utan resultat. Samt lagt container diven i menyn.
Måste ALLA subsidor ha rätt kod för att EN ska funka? Tänkte att under produkter och tjänser har jag ju precis samma subsidor som på testsidan där det fungerade, men har inte gjort ändringar i de andra subsidorna. Tycker det borde funka ändå på mixning, mastring, konsultering och priser...
Snart så! /Erik
Härligt:) Nu ser det bra ut! En mindre bug bara som jag inte kan sätta logik på, ibland om man klickar runt på länkarna så blinkar sidan till med 100% alpha mitt i faden, detta kommer lite då och då helt oregelbundet. Vet inte om det är värt att fixa, du kan ju se själv om du klickar på ett tag på de olika länkarna.
Tackar tackar! lägger upp det på riktiga sidan nu:)
/Erik
Jo, det är just som du menar som jag har tänkt mig, problemet är snarare med buggar :/
I det här fallet verkar ändå lösningen ganska enkel; byt ut
var f=function(){gotoLoc(loc);}; //Använder extern function istället
mot
var f=function(){gotoLoc(toloc);}; //Använder extern function istället
Felet är helt enkelt ett typo, som öppnar sidan utan fade (med rätt kod ska ?fade=yes läggas till, och när en sida med ?fade=yes laddas ska en fade-in-effekt ske). Jag är ganska säker på att detta borde fungera, då man FÅR fram den korrekta effekten genom att - även utan bugfixen - länka direkt till "sidan.html?fade=yes".
Förresten kanske jag ska förklara var fading-parametrarna ska ändras. Raden:
är fade-in-anropet. Det första argumentet är vad som ska visas (whitescreen är ett svart (ursprungligen vit) div som täcker hela framen), det andra är var faden ska börja (100%), det tredje slutet (0%), det fjärde är hoppen som ska göras (uppdatera bara fade:en var 4:e procent - för prestanda) det femte är hastigheten (10 millisekunder per procent * |(100-0)| = 1000 ms = 1 sekund. T.ex. för att få en halv sekund ska du alltså halvera värdet), och det sjätte är functionen som ska köras efter faden (i det här fallet ska divet försvinna för att man ska kunna använda sidan.
När jag tänker på det, skulle man faktiskt kunna lägga till en blockning i fade-in:en. Lägg då till "blockall=false;" i callbackfunction:
på raden framför. Då slipper du att sidan ändras medans den fade:as, vilket kan ge grafiska fel.
Fade-outen är på liknande sätt
fade(whitescreen,0,100,4,10,f);
Alltså: divet ska fade:as från 0% till 100% med ett hopp på 4% på tiden 1 sekund (10ms*|(0-100)| = 10ms * 100 = 1000ms = 1 sekund) och "f" ska köras efter (där f är en lokal function, som helt enkelt öppnar den andra sidan).
Hoppas det är förståeligt, och fungerar :)
Simon
Hejsan! Nu är "visited" problemet löst.
Men antingen har du missförstått mig eller så är det fortfarande fel, jag vill att det även ska fadas IN, alltså en fade-out på 1 sekund följt av en fade-in på 1 sekund. Så att det fadas åt båda hållen, nu blir det ju lite plötsligt när nya sidan kommer och inte lika mjukt som om framen hade fadat tillbaks också.
Förstår du?
Tack!!
/Erik
Vad bra!
Scriptet som jag använder är faktiskt inställt så att det ska gå till svart och sedan tillbaka, och att det ska ta ca 2 sekunder. Felet verkar istället vara en bug: när länkarna klickas öppnas sidorna som vanligt, och ingen hänsyn till fading finns (dock hinner faden påbörjas). Lösning bör vara enkel; byt ut
, vilket får länken att öppnas genom fading-kontrollen istället på vanligt sätt. Detta borde fungera ;)
Simon
Nu händer det något iallfall!
Dock verkar det som effekten försvinner när länken blivit besökt. Kolla själv! Ang själva effekten: hur gör jag för att den ska fada till helt svart och sedan från helt svart till full alpha på nästa sida? Måste ställa in lite ser det ut som. Faden bör ta ca 2 sekunder totalt. En sekund åt varje håll.
Tackar!
/Erik
Det ser bra ut det du skrivit, felet är i min kod ser jag nu.
Jag skrev: function(){frames['prodruta'].capLinks(this.href);}
vilket ger fel eftersom den lokala varianten av 'frames' överlagrar variabelnamnet (sk. closure), vilket jag inte tänkt på alls. Prova att byta ut hela for-loopen runt det från
var pwin=parent; for(var i=0;i<links.length;++i){ if(links[i].href.charAt(0)!='#') links[i].onclick=function(){pwin.frames['prodruta'].capLinks(this.href);} }
Om jag inte har fel (men det har jag antagligen) så borde det fungera.
Simon
Menar du något speciellt med "ombytta länkar"? i "och lägga de ombytta länkarna i en <div id="container">."
Nu jag jag lagt containerdiv:en runt om mixning, mastring, konsultering och pris-länkarna på huvudsidan där iframen finns.
Rätt?
Har rättat till allt nu.
Dock är det stendött!
Ang ";" iweb genererar sådana automatiskt efter bodyelementen, förutom den sista då. Är det bäst att köra utan helt och bara ha mellanrum mellan elementen?
/Erik
[förkortat för längd]
Postat av Simon (85.224.35.7) den 15 Mars, 2009 kl 18:10:19.
Som svar på: Re: Iframe med Javascript postat av Erik Wiss den 15 Mars, 2009 kl 13:33:34.