Till Startsidan

Skaffa webbhotell?
Läs JavaScript.nu's jämförelse av webbhotell.
Med priser från
9 kr / månad.

Genom ett samarbete får alla JavaScript.nu-
besökare dessutom 100 kr i rabatt vid beställning.


Re: Iframe med Javascript

[ JavaScript.nu's Forum ] [ Viktigt om forumet ] [ JavaScript.nu's Startsida ]


Forum / Iframe med Javascript
 Hej!

Har uppdaterat exakt som du skrev. Jag hatar iweb, när man lägger till en widget eller ta bort en så ändras namnen på de andra. Lade till en Flashspelare nu och då blev helt plöstligt inforuta widget1.

Men jag hittar ingenstans i koden som det behövs specifieras? Widget1 alltså. Har du löst det på något annat sätt!?

Det händer grejjer på sidan, men det är inte felfritt. kolla själv, lämnar det som det är tills du fått en chans att felsöka.

tack! :)

/Erik


 
Hmm... Du har ett par fel i din kod:

* Du har flera <div id="container"> i din meny (du ska bara ha en, runt ALLA länkarna). Per definition kan bara ett element ha ett specifikt id.

* Koden verkar inte hitta frames['widget3-frame']. Jag antar att det är samma problem som när jag förut gjorde sökmotors-funktionen, att FF inte hittar elementet på det sättet (förresten, har du tagit bort den? Iaf. mixning.html verkar inte skicka användaren till huvudsidan). Lösningen (den enklaste), är så här, omskriven från min andra bugfix:

I fadepage.js (postar om koden för enkelhet):

$_GET=[];
var searchp=location.search.substr(1).split("&");
for(var i=0;i<searchp.length;++i){
var tmpp=searchp[i].split("=");
$_GET[unescape(tmpp[0])]=unescape(tmpp[1]);
}

function setOpacity(obj,value){
if(typeof obj.style.opacity!="undefined")obj.style.opacity=value/100;
else if(typeof obj.style.MozOpacity!="undefined")obj.style.MozOpacity=value/100;
else if(typeof obj.style.filter!="undefined")obj.style.filter="alpha(opacity="+(value)+")";
}

whitescreen=null;

function fade(obj,from,to,steps,speed,callback){
setOpacity(obj,from);
for(var i=from+1;i<to;i+=steps){
(function(){var op=i;setTimeout(function(){setOpacity(obj,op);},(op-from)*speed);})();
}
for(var i=from-1;i>to;i-=steps){
(function(){var op=i;setTimeout(function(){setOpacity(obj,op);},(from-op)*speed);})();
}
setTimeout(function(){setOpacity(obj,to);},(Math.abs(to-from))*speed);
if(typeof(callback)!="undefined"){
setTimeout(callback,(Math.abs(to-from)+1)*speed);
}
}

function gotoLoc(loc){ //Extern function nu
if(typeof window.onbeforeunload=='undefined')whitescreen.style.visibility="hidden";
location.replace(loc); //Förut location=toloc;
}

blockall=false;
function fadeToLoc(loc){
blockall=true;
whitescreen.style.visibility="visible";
var toloc=loc+(loc.indexOf("?")!=-1?"&":"?")+"fade=yes";
var f=function(){gotoLoc(toloc);}; //Använder extern function istället
fade(whitescreen,0,100,4,5,f);
}

function capLinks(href){
if(!blockall)fadeToLoc(href);
return false;
}

function initFade(){
whitescreen=document.createElement("div");
whitescreen.style.position="absolute";
whitescreen.style.visibility="hidden";
whitescreen.style.top="0px";
whitescreen.style.left="0px";
whitescreen.style.width="100%";
whitescreen.style.height="100%";
whitescreen.style.backgroundColor="black"; //Ändring från "white"
document.body.appendChild(whitescreen);


var twin=window;
var fixLinks=function(pwin){
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(){twin.capLinks(this.href);return false;}
}
}

parent.parent.fixFade(fixLinks,1);

if($_GET['fade']=='yes'){
whitescreen.style.visibility="visible";blockall=true;
fade(whitescreen,100,0,4,5,function(){whitescreen.style.visibility="hidden";blockall=false;});
}
}

window.onload=initFade;


På meny-sidan (meny.html):

Lägg till onload="parent.parent.fixFade(window,2);" i <body>

På huvudsidan (/Demomix.se.html):

Lägg till i <head>:

<script type="text/javascript">
fLinkState=0;
fMwin=null;
fFixF=null;
function fixFade(a,b){
fLinkState|=b;
if(b==2)fMwin=a;
else fFixF=a;
if(fLinkState==3)fFixF(fMwin);
}
</script>

Som vanligt påstår jag att koden ska fungera :)


För att svara på dina andra frågor:

* "vad du tycker att alternativet till iframe är i detta fall"
- Att bygga sidan så att menyn och subsidan är på samma sida, helt utan frames (antagligen inkluderas meny, headers, etc. genom PHP). Det skulle helt klart kunna bli en del problem just för din sida om du t.ex. fortfarande vill ha fade-effekter och vill att musiken ska spela kontinuerligt. Dessutom skulle det kunna bli en hel del jobb med att migrera sidan, och att få det att fungera i iWeb (säkert hopplöst om det även ska läggas till menyer genom PHP, om du ens har tillgång till detta). Så i ditt fall är det kanske ingen vidare bra idé, men i regeln har det en mängd fördelar.

* "Måste ALLA subsidor ha rätt kod för att EN ska funka?"
- Fade-out-effekten fungerar bara för sidor MED koden, och kombinationen med fade-in och fade-out fungerar bara om båda sidorna som är involverade har koden (ingen fade-in effekt sker om inte fade-ut-effekt har skett innan). Så svar nej, men utan detta kan en del konstiga effekter uppkomma.

Simon

 
Fixade koden i fadepage.js, dock händer det fortfarande ingenting. Antar att det är bäst att få den att fungera först, innan jag kollar om ditt andra alternativ (för att fixa fadarna) behövs.

/Erik

 
Innan jag försöker fixa koden tänkte jag bara fråga vad du tycker att alternativet till iframe är i detta fall? Du har ju sett hur jag vill ha det vid det här laget. /Erik



 
Kul att det fungerar!

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>

På huvudsidan (/Demomix.se.html):

Lägg till i <head>:

<script type="text/javascript">
linkState=0;
function fixLinks(a){
if(linkState==0)linkState=a;
else{
if(linkState==1)linkState=a;
linkState.fixLinks();
}
}
</script>

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

 [förkortat för längd]


Postat av Erik (83.249.211.122) den 17 Mars, 2009 kl 17:27:51.
Som svar på: Re: Iframe med Javascript postat av Simon den 17 Mars, 2009 kl 16:15:28.


Svar på inlägget:


Posta ett svar:

Namn:
E-Mail:
Rubrik:
Meddelande:
Ja tack, maila mig om andra svarar på detta inlägg.
Ja tack, maila mig om andra svarar på mitt inlägg.


[ JavaScript.nu's Forum ] [ Viktigt om forumet ] [ JavaScript.nu's Startsida ]






Copyright © Omid Rouhani 1997-2022; Alla rättigheter reserverade.
Guider: [ HTML guide ] - [ JavaScript guide ] - [ DHTML guide ] - [ Perl guide ] - [ Sitemap ]