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
 Ganska irriterande ja, men grunden är ju lagt i vilket fall som helst.
Om det behövs kan du även ladda ner min (ganska gamla) kopia av några av projekt-filerna från http://simonsoftware.se/other/Demomix.se.html, Ctrl+S i Firefox ska fungera. Allt utom inforuta kan förresten läggas utanför iframes, och jag tror faktiskt att scripten kan fungera så gott som helt utan ändringar (det enda som bör ändras är i menykoden, där parent.parent. ska tas bort).

Tyvärr är sidan offline, så jag kan inte riktigt hjälpa dig med första problemet, men jag kan titta på det när den kommer online. Det ser iallafall ut som om koden bör vara korrekt, men det är svårt att se alla småändringar (eller brist på sådana).

Simon

 
Innan du börjar....
Igår var jag tvungen att reboota mitt os, och föga överraskande kan iWeb inte öppna projekt efter att man reinstallerat iweb. Dvs jag måste bygga om allt som är gjort i iweb från början. Som tur är har jag fört över det mesta till DreamWeaver och ren html. Men huvudsidan, www.demomix.se/start.html, som den nu heter måste jag göra i dreamweaver. Ska skrota iWeb totalt om man måste börja om från 0 så fort man rebootar systemet, det är ju sjukt.

MEN nu när vi har chansen att göra något bra av detta så måste jag fråga om man kan undvika några av följande iframes som startsidan består av:
iframe1: banner
iframe2: meny
iframe3: inforuta
iframe4: flashplayer

Detta innebär att parent.parent måste ändras fadepage.js.

Jag förstår om du vill skjuta mig nu, men jag tror det är till det bättre att köra allt i DW, så slipper jag köra applescript med textwrangler för att lägga tillbaks koderna efter varje publish.

/Erik


 
Nu har menyn börjat blinka igen, kan du bara kolla igenom koderna jag postar här så att de stämmer. Det ska vara de aktuella.

Fadepage.js:

$_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.zIndex=1000;
whitescreen.style.visibility="hidden";
whitescreen.style.top="0px";
whitescreen.style.left="0px";
whitescreen.style.width="100%";
whitescreen.style.height="100%";
whitescreen.style.backgroundImage='url(http://www.demomix.se/demofiler/browsertexture.jpg)'; //Ändring från "white"
document.body.appendChild(whitescreen);


parent.parent.fixFade(window,1);

document.documentElement.style.backgroundColor='transparent';
document.documentElement.style.backgroundImage='none';
if($_GET['fade']=='yes'){

whitescreen.style.visibility="visible";blockall=true;
fade(whitescreen,100,0,4,5,function(){whitescreen.style.visibility="hidden";blockall=false;});

}
if(document && document.body)document.body.style.visibility='visible';
}

$(initFade);

Meny.html

<body onload="parent.parent.fixFade(window,2);">

Huvudsida, demomix.se.html:

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

function fCapLinks(href){
if(fOwin){
fOwin.capLinks(href);
return false;
}
return true;

}

function fFixMenu(menu){
var twin=window;
var links=menu.document.getElementById("roll").getElementsByTagName("a");
for(var i=0;i<links.length;++i){
if(links[i].href.indexOf('#')==-1)
links[i].onclick=function(){return twin.fCapLinks(this.href);}
}
}
</script>

Subsida:

<head>
<script type="text/javascript">
if(document && document.documentElement)document.documentElement.style.backgroundImage='url(http://www.demomix.se/demofiler/browsertexture.jpg)';</script>
<script type="text/javascript" src="http://www.demomix.se/nymeny/jquery.js"></script>
<script type="text/javascript" src="http://www.demomix.se/demofiler/fadepage.js"></script>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Mixning</title>
.........

<body>
<script type="text/javascript">
if(document && document.body)document.body.style.visibility='hidden';
</script>
<body background="http://www.demomix.se/demofiler/browsertexture.jpg"; onbeforeunload="">
____________________________________________

Jag har inte medvetet ändrat något sedan allt fungerade perfekt, så det måste blitt nå fel. Vet att jag ändrade huvudsidans bakgrund från den ljusa texturen till den mörka, och det är den som blinakr igenom ibland när man klickar i menyn. Så det kan ju vara så att det inte fungerade tidigare heller, men att den ljusa texturen bakom iframen gjorde att blinket såg ut att vara en del av faden. Skulle förståss kunna sätta ett object baom iframen med den ljusa texturen, men det känns som plan B, efter att du kollat igenom det jag postade nyss.

Tusen tack...

/Erik

 
Förresten, med de röda punkterna på menyn:

Prova att ta bort koden jag skrev om, och i slutet på CSS-filen lägga:

#roll .sub li {
color:red;
list-style-type:disc;
}

Detta verkar vara det som ska fungera, men mystiskt nog får jag inte upp något när jag ändrar i Firebug... Kanske en Firefox bug? Hur som helst kan du prova det och se om det fungerar.

Simon

 
Jag öppnade iframen i Firebug, och såg på CSS-displayen att main-content-divet hade z-index:30, vilket då hamnade ovanför fade-divet med z-index:0.
Firebug är alltid bra :)

Simon

 
Funkade fint:)

Kan du berätta hur du kom fram till det?
/Erik

 
Det verkar vara en enkel sak att fixa, ge helt enkelt whitescreen-divet ett högt z-index. Dvs. vid det andra
whitescreen.style....=...;
lägg till:
whitescreen.style.zIndex=1000;

Det hoppas jag ska fungera (har dock inte testat det).

Simon

 
Kan du kolla varför inte faden fungerar på blog.html. (nyheter i menyn). Har gjort exakt likadant som på de andra sidorna, men jag kan också se att utstyrseln på blog.html-koden är annorlunda eftersom den är genererad av iweb.
Hela Bodyn är rosa, som CSS...

/Erik

 
Nej, det kan jag inte se. Men bakgrunden är väl ändå ungefär samma färg?

Simon

 
Verkar fungera bra med samtliga dina ändringar.
Tack!
Förresten, ser du en vit, 1px, horisontell linje högst upp i iframen som, ibland, inte följer med i faden?


 
Det finns fortfarande en del saker som jag ser bör fixas:

* Byt ut raden:

Ändra

function fCapLinks(href){
fOwin.capLinks(href);
}

(på huvudsidan) till

function fCapLinks(href){
if(fOwin){
fOwin.capLinks(href);
return false;
}
return true;
}

och ändra

links[i].onclick=function(){twin.fCapLinks(this.href);return false;}

till

links[i].onclick=function(){return twin.fCapLinks(this.href);}

(testa detta innan du lägger in det, det är inte essentiellt, men det undviker ett JavaScript-error om det fungerar)

* Flytta ner

if(document && document.body)document.body.style.visibility='visible';

en rad (till mellan klamrarna, inte ovanför dem).

Om du inte gör detta kommer inte sidan visas första gången den besöks!

* Där du har:

document.documentElement.style.backgroundColor='transparent';

bör du även ha

document.documentElement.style.backgroundImage='none';

under eller ovanför eller istället för den övre koden, så att du undviker dubbla bakgrunder.


Nu hoppas jag att koden jag gett dig kan bli buggfri, till slut.

Simon

 
Nu jävlar fungerar det bra. (om du kollar endast produkter och tjänster delen). Har inte stött på ett enda blink ännu. Hoppas det fortsätter så!!

You're a genious.
.Erik

 
Dock verkar det inte helt fungera. Du kan, som ytterligare en sak, göra:

* Precis efter <body>:

<script type="text/javascript">
if(document && document.body)document.body.style.visibility='hidden';
</script>

* Flytta, om det ger effekt, ner alla scripten från <head> till under den raden i <body>.

* I fadepage.js, i slutet av initFade():

if(document && document.body)document.body.style.visibility='visible';

Det skulle kunna ge ytterligare lite (mycket?) förbättring i effekten.

Simon

 
Ja, den koden.

Och det borde vara väldigt enkelt att istället använda en texture. Byt helt enkelt ut background-color:black mot background-image:url(bilden.png) . I JavaScript blir det alltså

document.documentElement.style.backgroundImage='url(browsertexture.jpg)';

Observera att för laddningens skull är det bra att ÄVEN sätta background-color, eftersom man då slipper stunden så bilden inte ännu laddats.

Simon

 
"och tar bort (nästan) samma kod från fadepage.js"

if(document && document.documentElement && $_GET['fade']=='yes')document.documentElement.style.backgroundColor='black';

?

/Erik

 
Yes!

Har en fråga (håller på med koderna nu)

Kan man fada till en tiled texture? Så att det ser ut som att endast texten på sidan fadas ut och inte bakgrunden?

typ
document.documentElement.style.backgroundColor='browsertexture.jpg';

vet att ju denna kod inte funkar, skriver bara för tydlighets skull.

/Erik


 
Kul att huvudfunktionaliteten finns iallafall, det är ju ett gott tecken... Jag hade nästan förväntat mig att små fel skulle uppstå med det här. Du kan prova att genomföra allt detta, och se om det hjälper:

* På varje subsida lägger du till

<script type="text/javascript">
if(document && document.documentElement)document.documentElement.style.backgroundColor='black';
</script>

i absoluta början på <head> och tar bort (nästan) samma kod från fadepage.js. Observera att för att koden ska köras omedelbart bör den INTE läggas i speciella .js-filer.

* I fadepage.js, flytta

document.documentElement.style.backgroundColor='transparent';

en rad upp (över if-satsen).


Om du vill, kan du även prova (något osäkrare):

* Byt ut

document.body.appendChild(whitescreen);

mot

document.documentElement.appendChild(whitescreen);

* Byt ut:

$(initFade)

mot

if(document && document.documentElement)initFade();else $(initFade);

Det är möjligt att det skulle få effekten att gå snabbare igenom.

Jag har fler idéer, men testa och se om det hjälper först.

Simon

 
Ack ack, lyckan blev kortvarig. Nu blinkar det till väldigt frekvent helt plötsligt. Hittar inte logiken i detta. Testade att bya ut 'transparent' mot de andra alternativen (auto, inherit, none osv..) utan förbättring. De gör dessutom så att bakgrunden blir svart runt omkring innehållet. 'transparent' fungerar helt klart bäst av dessa.

Man kan dessutom se att det som blinkar till är kommande sida. Dvs går jag från mixning till mastring så blinkar mastring till innan in-faden till mastring initieras.

Lämnar koderna i detta skick om du orkar kolla på det.

/Erik

 
Hej!

Nu funkar det jättebra. Bara någon enstaka gång som det blinkar till mitt i faden, men det är betydligt stabilare nu än tidigare. Jag är nöjd! Hoppas bara att menyn beter sig korrekt i de andra webläsarna också.

Tack tack!
/Erik

 
Hmmm.

För mig ser det inte ut som om du har uppdaterat padepage.js enligt mitt senaste försök. Därför skickas fel typ av argument, och ett fel uppstår... Prova att ändra fadepage.js till att innehåll exakt den koden som jag postat senast (om möjligt med ändringen från window.onload=initFade; till $(initFade);).

Då hoppas jag att det ska fungera bättre.

Simon

 
Nu borde jag ha gjort rätt! (eller inte)

Jo, iWeb tog bort head koden, men jag har satt dit den nu igen och ska inte uppdatera sidan förrän du hunnit kolla på det. Funkar inte fortfarande.

Ska göra research på explicit i iweb. Hoppas dock att jag ska kunna flytta över allt till DW. Men jag är rädd att jag inte jag är nog skicklig att få till huvudsidan så att den ser fin ut i alla webläsare. Börar bli bråttom dessutom, sidan ska vara klar om 2 veckor.

Hade jag inte fått din hjälp vet jag inte hur sidan hade sett ut...

/Erik


 
Det verkar vara två saker som är fel:

* fixFade-function på huvudsidan verkar ha försvunnit (iWeb? ...). Den är essentiell för effekten.

* Jag råkade, för fix 2, skriva $(initPage) istället för $(initFade), vilket får till följd att fade-functionen inte laddas alls.

Vad menar du förresten med att det andra fungerade galant? Punkt 1 och 3? Lite tvetydigt..

Och finns det verkligen inget sätt att från iWeb lägga in kod explicit, så att den inte skrivs över?

Simon

 [förkortat för längd]


Postat av Simon (85.224.35.7) den 24 Mars, 2009 kl 18:16:39.
Som svar på: Re: Iframe med Javascript postat av Erik den 24 Mars, 2009 kl 13:25:35.


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 ]