Van olyan html vagy esetleg php kód, ami ha meghívódik, akkor azon nyomban átdob egy másik lapra?
<?
header('Location: [link]
// Átirányítás HTTP fejléccel. Csak akkor működik,
// ha még nem került semmi a kimenetre.
// Érdemes utána egy exit(); -et is tenni, így más
// nem kerül a kimenetre.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " [link]
<html xmlns=" [link] lang="hu" xml:lang="hu">
<head>
<meta HTTP-EQUIV="REFRESH" content="0; url= [link]
<!-- Átirányítás meta tag-el, 0 másodperc után. -->
</head>
<body>
<script>
document.location=' [link]
// vagy
window.location=' [link]
// Átirányítás javascripttel.
</script>
</body>
<!-- A 2. és 3. módszerrel lehet késleltetni is az átirányítást. -->
</html>
#3:
A Chrome sem „szarja le” a meta tag-et.
Annyiból igazad van, hogy a W3C ellenjavallja a használatát, viszont a ma használatos böngészők mind támogatják.
Ha nálad nem működik, akkor lehet, hogy telepítették Chrome alá egy olyan kiegészítőt, ami blokkolja ezt a meta tag-et. Esetleg más szoftver (proxy, tűzfal) blokkolja azt. (A meta tag-es megoldást nagyon sok, nagy forgalmú oldal használja.)
Azért leírom a hátrányait is mindegyiknek:
1. HTTP header:
Statikus oldalaknál nem működik. Mindenképpen szerver oldali programozás, vagy speciális szerverbeállítások kellenek hozzá. Egy alap Apache kiszolgáló esetén, ha nincs PHP, akkor nem használható ez a fajta megoldás. Viszont ezzel a módszerrel lehet leginkább elrejteni az átirányítás tényét.
2. HTML Meta tag
Talán ez a legjobb megoldás. Bár léteznek olyan eszközök, amelyek blokkolhatják, de rendszerint aki ilyen szoftvert, bővítményt letölt, az tudja mit csinál. IE6 vagy korábbi változat esetén elronthatja a vissza gomb működését.
3. Javascript
Egy javascript hiba működésképtelenné tudja tenni ezt a fajta megoldást.
Általában elrontja a vissza gomb működését. (Az új oldalnál a vissza gomb megnyomásával arra az oldalra kerülünk, ahonnan automatikusan átirányít minket az új oldalra.)
Jópár felhasználó használja a böngészőt javascript nélkül. Erre mindenképpen gondolni kell. (Illendő odatenni egy „ha az oldal nem jelenne meg, akkor kattints ide.) Tehát ezzel a módszerrel nem annyira tudod elrejteni az átirányítást.
Érdemes esetleg kevert stratégiát használni. Ha biztosra akarsz menni, akkor használod mindhármat.
Nem tudom, én bárhol olvastam, mindenhol azt írják, hogy nem minden böngésző fogadja el ezt a meta tagot. Ezért is írják, ki, ha nem tölt be az oldal akkor... stb.
Amúgy nálam sem működik. Nem blokkoltam semmivel, sőt le sem töltöttem hozzá semmit. És gáz, mert az oldalamat frissíteni kéne egy-egy apró módosítás után. De még nem tudom, hogyan. Megkérdezem a szerverhostot, ők tiltják-e stb. Nem hiszem. Lehet htaccess fájlal próbálkozom. De az a baj, hogy abban is tudomásom szerint csak fájlokra lehet időtartamot megadni a cachre, nem pedig külön oldalakra.
JS-ben megoldható egyébként, hogy csak egyszer frissítsen? Ha megtette, ne tegye újra?
#5
Én használtam a Firefox összes változatát 2.x-től (9.x-ig).
Használtam a Chrome összes változatát (1.0-tól a 16.x-ig).
Használtam az Opera 10.0-től az összes fő változatot (12.x-ig).
Egyiknél sem volt olyan gondom, hogy ne ment volna a meta tag-el történő frissítés. (Most nem akarok nagyon keresgélni, de ez az oldal is azt mondja, hogy a modern böngészők támogatják: http://en.wikipedia.org/wiki/Meta_refresh )
Hogy más operációs rendszereknél mi a helyzet, ebben nem vagyok biztos.
„az oldalamat frissíteni kéne egy-egy apró módosítás után. De még nem tudom, hogyan.”
Ez ugye attól függ, hogy milyen módosításról van szó és arról honnan értesül a böngésző, hogy módosítás történt, ezért újra kell tölteni az oldalt.
Pl. hasznos az újratöltés, ha mondjuk egy fórumon küld be a látogató egy hozzászólást és ezért újratöltöd az oldalt, hogy egy Ctrl+R-el ne küldje el újra a hozzászólást. Erre itt egy példa:
---------- forum.php ----------
<?
if (isset($_POST['hozzaszolas'])) {
// Ide kerül a hozzászólás feldolgozása. Pl.
// A hozzászólás bekerül az adatbázisba…
// A végén pedig eljátszod ezt:
header('Location: forum.php');
echo "<html><head>";
echo "<meta HTTP-EQUIV=\"REFRESH\" content=\"2; url=http://www.valami.hu/forum.php\">";
echo "</head><body><script>";
echo "window.location='http://www.valami.hu/forum.php';";
echo "</script>";
echo "<a href=\"http://www.valami.hu/forum.php\">A hozzászólásodat rögzítettük. Kattints ide a folytatáshoz</a>";
echo "</body></html>";
exit();
}
// Itt a folytatás. Hozzászólások beolvasása, stb…
?>
---------- vége ----------
A fenti kód nem valid, de talán így jobban látható mi történik. A frissítés csak akkor történik meg, ha valaki megnyomta a formon a beküldés gombot. Ebben az esetben történik egy automatikus átirányítás, ami mindhárom módszert használja és még arra is gondol, ha egyik módszer sem működne.
Ha bizonyos időközönként akarod javascripttel újratölteni az oldalt, akkor használhatod a setTimeout-ot, vagy a setInterval-t.
Az újratöltés szükségessége megszüntethető például úgy is, hogy a beküldésre, oldalfrissítésre AJAX-ot használsz.
A .htaccess ha jól tudom, csak URL és néhány egyéb kritérium alapján képes átirányítani.
De pl. egy fórum esetén megoldható a dolog másképpen is. Pl. a fórum megjelenítéséről a forum.php gondoskodik. A beküldést viszont egy másik php fájl dolgozza fel, ami visszairányít a forum.php-re. Pl. legyen ennek a neve a forum_post.php. (A form tag action paraméterénél ezt adod meg.)
De a többszörös hozzászólást más módon is ki lehet küszöbölni. Pl. megvizsgálod, hogy mi volt az utolsó hozzászólása az illetőnek, session változókkal és form rejtett mezőjébe tett véletlen szám, vagy időbélyeg segítségével is lehet játszadozni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!