Hej!
Jag har 2 sidor med javascript-kod på. Båda använder samma funktioner, som jag lagt i separata filer.
Kod
sida1.html
...
<body>
...
<SCRIPT LANGUAGE="javascript" SRC="javascript/passWd.js"></script>
<SCRIPT LANGUAGE="javascript" SRC="javascript/cookie.js"></script>
<script type="text/javascript">
checkPassWd();
</script>
...
Funktionen checkPassWd ligger i passWd.js. Den körs. Den anropar funktioner i cookie.js
Var ska cookie.js inkluderas? Tex i passWd.js?
Verkar som sida2 som öppnas av sida1 inte kan använda funktioner som inkluderas av sida1? Ska de inkluderas igen?
Sist men inte minst, verkar cookie.js som jag hittade på http://echoecho.com/jscookies02.htm
inte funkar nåt vidare.
/* Kollar om klienten har matat in passwd vid tidigare besök,
annars sparas passwd i cookie hos klienten,
förutsatt att denna matar in rätt passwd. */
function getCookie(NameOfCookie) {
// First we check to see if there is a cookie stored.
// Otherwise the length of document.cookie would be zero.
if (document.cookie.length > 0) {
// Second we check to see if the cookie's name is stored in the
// "document.cookie" object for the page.
// Since more than one cookie can be set on a
// single page it is possible that our cookie
// is not present, even though the "document.cookie" object
// is not just an empty text.
// If our cookie name is not present the value -1 is stored
// in the variable called "begin".
begin = document.cookie.indexOf(NameOfCookie+"=");
if (begin != -1) {
// Our cookie was set.
// The value stored in the cookie is returned from the function.
begin += NameOfCookie.length+1;
end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = document.cookie.length;
}
return unescape(document.cookie.substring(begin, end));
}
}
return null;
// Our cookie was not set.
// The value "null" is returned from the function.
}
function setCookie(NameOfCookie, value, expiredays) {
// Three variables are used to set the new cookie.
// The name of the cookie, the value to be stored,
// and finally the number of days until the cookie expires.
// The first lines in the function convert
// the number of days to a valid date.
var ExpireDate = new Date ();
ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000));
// The next line stores the cookie, simply by assigning
// the values to the "document.cookie" object.
// Note the date is converted to Greenwich Mean time using
// the "toGMTstring()" function.
document.cookie = NameOfCookie + "=" + escape(value) +
((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString());
}
function delCookie (NameOfCookie) {
// The function simply checks to see if the cookie is set.
// If so, the expiration date is set to Jan. 1st 1970.
if (getCookie(NameOfCookie)) {
document.cookie = NameOfCookie + "=" +
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
}
}
Ang. inkludera kod. Det borde vara som i C++ med <inlude ?.h>, så det blir en pool av funktioner som kan anropa varandra hur som helst osv.
mvh
Rastapopolus
JojoxxMedlem sedan juni 20004 308 inlägg Du har gjort rätt, men det kan vara ett timing-problem som inträffar när du anropar checkPassWd(); direkt på det viset. För att vara säker på att javascripten är inlästa innan du försöker anropa funktioner från dem kan du köra initieringen vid onLoad-eventet i <body>.
Ang. inkludera kod. Det borde vara som i C++ med <inlude ?.h>, så det blir en pool av funktioner som kan anropa varandra hur som helst osv.
Det kan du. Du kan skriva vilka funktioner du vill och anropa dem från varandra, men de måste som sagt vara laddade innan du kan anropa dem.
Ang. cookies har Spango skrivit ett cookies-bibliotek som ligger i Script-forumet vilket du kan använda.
Nu funkar det. passWd.js tog jag bort eftersom den är speciell beroende på om fönster ska öppnas eller inte (läs: om cookie finns eller inte). Den körs i två rätt olika versioner på index.html och login.html (popup). Jag har bara en extern fil: cookie.js. Den anropas av både index.html och login.html. Det funkar bra. Men det verkar som jag måste inkludera cookie.js på login.html också. Dvs alla javascript som körs på index.html försvinner ur "poolen" när kod på login.html körs.
2. Har jag rätt i att om en html sida ändrar innehåll med window.location.href så körs inte javascript kod som kommer efter det?
JojoxxMedlem sedan juni 20004 308 inlägg
Men det verkar som jag måste inkludera cookie.js på login.html också. Dvs alla javascript som körs på index.html försvinner ur "poolen" när kod på login.html körs.
Du måste inkludera .js-filerna på alla sidor som använder dem. Det räckar alltså inte att inkludera dem på en sida för att du sedan skall kunna anropa dem om du laddar en ny sida som inte har scripten inkluderade. Finns sidan med scripten laddade i en annan frame eller ett annat fönster kan du dock använda funktionerna från dem (så länge e.v. säkerhetsaspekter i webbläsaren säger annat).
2. Har jag rätt i att om en html sida ändrar innehåll med window.location.href så körs inte javascript kod som kommer efter det?
Laddar du en ny sida avbryts javascript-exekveringen på från den tidigare ja (så länge som sidan laddas i samma fönster/frame så att den gamla sidan ersätts).
kan ej köra inkludera funktioner från annan sida
Finns sidan med scripten laddade i en annan frame eller ett annat fönster kan du dock använda funktionerna från dem (så länge e.v. säkerhetsaspekter i webbläsaren säger annat).
Jag kanske lyckas vad det lider. Men vad hade hänt om användaren (dumt av honom, men kan ju ske) hade stängt index.html fönstret? Då kan man väl inte anropa funktioner därifrån? Så för att vara säker, bör jag väl inkludera cookie.js i alla fall?
Förslag
pseudo: om window.opener stängs så inkludera cookie.js till login.html?
---
Om jag fattat rätt så kan jag inte ropa på funktioner om sidan laddas om (login.html laddar antingen login.en.html eller login.se.html, beroende på språkval etc). Dvs jag kan inte inkludera cookie.js på endast login.html utan den måste inkluderas på login.en.html och login.se.html också väl?
När användaren matat in rätt lösen så uppdateras index.html i bakgrunden till min huvudsida genom att:
// close popup (this window)
window.close();
window.opener.location.href=passWd + "/index.html";
Jag testade att stänga index.html i bakgrunden. Resultat: login.html laddas om (så ska det inte vara). Kan man kolla om window.opener (dvs index.html) existerar?
Följdfrågan inställer sig, ska man skapa nytt fönster och stänga window (login.html) eller resiza det till hela skärmen och ladda huvudsidan? Vad är snyggast enligt gängse programmeringspraxis? Jag skissar på en lösning där index.html skickar koordinater och storlek till login.html "onClose" (om man kan göra så; hur göra?) och sen resiza login.html och positionera den så den blir identisk med stängda index.html
Jag har problem med window.opener.close och window.opener.closed
internetkällor säger att window.closed kan användas i if sats, men det verkar inte funka med window.opener.closed.
JojoxxMedlem sedan juni 20004 308 inlägg En del av dina frågor bygger på missuppfattade antagningar, så vi får börja att nysta i någon ände.
När du inkluderat en .js-fil som innehåller funktionen foo(); så anropar du den som bekant med foo(). Finns funktionen definierad i en annan frame eller i ett annat fönster (via en inkluderad .js-fil eller inte, spelar ingen roll) så anropar du den med objekt_referens_till_fönstret.foo() Alltså om du använder koko=window.open(...) så blir det koko.foo() Skall du anropa en funktion i en annan frame kan det bli parent.framenamn.foo().
Följande kodsnutt från ditt inlägg;
window.close();
window.opener.location.href=passWd + "/index.html";
borde resultera i att fönstret stängs och exekveringen avbryts. Skall det fungera bör du byta plats på raderna.