Keresés
Hírlevél
 
Kiemelt témák
»Hogy viszonyul ehhez a család?
»Legjobb metodika emberi relációk tárolására
»A programozó hibája, hogy törik a programját?
»Jogosultság kezelés mezőszinten
Állás/munka
»Wordpress szakértőt keresünk
»Kamu álláshirdetők listája
»Front-end fejlesztő / Sitebuilder
»DataStore Developer
»PHP programozó, webfejlesztő munkát keres
» több téma
Tudástár
Oldalon keresés 8x írja ki az eredményt
?XML-ből sok szövegmező
?Input mezőből visszakapott adat probléma
TinyMCE és az ékezetek
?Rengeteg hasonló kép betöltése gyorsan (PHP)
Ékezetes kar. nem minden táblában jól
?Shelltreeview gond
Grafikon rajzolás probléma
?Onclick= php függvény
?Egyenes megrajzolása
?Access-ből adott xml fájl kinyerése
Listázás időpont szerint
Exportálás változó könyvtárba
*Link eredményének kiolvasása
Imagemapre képet
» több téma
Társalgó
»A programozásból jól meg lehet élni?
»MFC tanulás
»Könyvet adok-veszek
»Hogy viszonyul ehhez a család?
»Nintendo wii
»Letölthető az új Rad Studio XE és Delphi XE
»Weblap véleményezés
»Játékmotor elmélet
»Informatikai bulvárlap
»Delphi-ről C++-ra váltás
» több téma
ASP  |  C#  |  C++  |  CSS  |  Delphi  |  Flash  |  HTML  |  Java  |  JavaScript  |  Pascal  |  Perl  |  PHP  |  Python  |  Visual Basic  |  Visual C++  |    »    

Tudástár

»

IE - A weblap lejárt

»

IE - A weblap lejárt

nyitotta: jancsovics, idő: 2010.03.11., moderátor: moderator
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben Nyomtatható verzió

Kategóriák:Programozási nyelvek » JavaScript
Web-programozás » HTML

Sorrend:
Időzóna:
Blokkméret:
Sziasztok!
Olyan problémára hívták fel a figyelmem egy weblapommal kapcsolatban, hogy amikor formokat submitolnak, azt az üzenetet kapják az Internet Explorertől (csak IE), hogy "A weblap lejárt". Íme egy PrintScreen
Próbáltam megtalálni a probléma gyökerét, és úgy érzem hogy ez sikerült is, de a megoldást megtalálni, a problémát elhárítani nem tudom.
A helyzet a következő:
Egy JQuery szövegbuborékot használok arra, hogy informáljam a felhasználót a történésekről. Ez úgy történik, hogy van egy function, amit így néz ki:
function ertesites(szov,cim,tip,marad) {
if(marad == '1') {
ert = true;
} else {
ert = false;
}
$.noticeAdd($.extend({
text: szov,
title: cim,
type: tip,
stay: ert
}));
}
Természetesen a JQuery fájlok szépen betöltve (hangsúlyozom, csak IE-ben van ez a probléma). A functiont így hívom meg egy form submitolása után:
print "<script type='text/javascript'> ertesites(\"A jelszavadnak minimum 6 karakter hosszúnak kell lenni!\",\"Hiba\",\"error\",0); </script>";
Az első paramétert az üzenet szövege, második a cím (fejléc), harmadik a hiba típusa, negyedik pedig, hogy eltűnjön-e magától egy bizonyos idő után.

Azt tapasztaltam, hogy amikor a függvény hívását <script> tag-ek között printelve hívom meg (ahogy most mutattam), akkor jelentkezik a weblap lejárt üzenet. IE-ben egyedül csak akkor jó, amikor ajax híváson keresztül hívom meg a kiprintelt függvényt egy eval függvénnyel.

Valaki találkozott hasonló dologgal? Esetleg valakinek van ötlete, hogy mivel tudnám elhárítani ezt a problémát?
Ha bármi részletre kíváncsiak vagytok, kérezzetek bátran!

Előre is nagyon szépen köszönöm!
Mert elküldöd az adatokat POST-al. Ne tedd. Úgyértem ne legyen POST data (űrlap submit) semmilyen JS vagy akármilyen esemény előtt.
Az a baj, hogy ez nagyjából elkerülhetetlen. Itt egy részlet, talán így világosabb:

if(isset($_GET['modosit1'])){
if($_POST['jelszo'] != NULL && $_POST['jelszo2'] != NULL) {
if($_POST['jelszo'] == $_POST['jelszo2']) {
if(strlen($_POST['jelszo']) > 5) {
mysql_query("UPDATE felhasznalok SET jelszo='".md5($_POST['jelszo'])."' WHERE uid='".$_SESSION['uid']."'");
print "<script type='text/javascript'> ertesites(\"Módosítottad a jelszavadat!\",\"Siker\",\"success\",0); </script>";
}else{
print "<script type='text/javascript'> ertesites(\"A jelszavadnak minimum 6 karakter hosszúnak kell lenni!\",\"Hiba\",\"error\",0); </script>";
}
}else{
print "<script type='text/javascript'> ertesites(\"A két jelszó nem egyezik!\",\"Hiba\",\"error\",0); </script>";
}
}
if($_POST['email'] != NULL && $_POST['email'] != $felhasznalo['email']) {
if(check_email_address($_POST['email'])) {
mysql_query("UPDATE felhasznalok SET email='".$_POST['email']."' WHERE uid='".$_SESSION['uid']."'");
print "<script type='text/javascript'> ertesites(\"Módosítottad az e-mail címed!\",\"Siker\",\"success\",0); </script>";
}else{
print "<script type='text/javascript'> ertesites(\"Nem valós e-mail címet adtál meg!\",\"Hiba\",\"error\",0); </script>";
}
}
}
Egyet nem értek. Mire jó az, hogy egy üzenetet javascripttel küldesz? Nem lenne egyszerűbb ez?
print "<p>Hibaüzenet.</p>";

Ez azért is jobb lenne, mert akkor mindenkinek megjelenne, mert ha a javascriptet kikapcsolom, akkor már nem kapok semmit vissza.

Szerk.: ez böngészőfüggetlen megoldás.
Hehe, ez kétségtelen, de így dizájnosabb, jobban tetszik és már csak azért is kötöm az ebet a karóhoz, mert kíváncsi vagyok, hogy mi az IE baja.
Ez a noticeAdd pontosan mit csinál? Nem találtam doksit hozzá.
Azt hiszem, találtam egy bajt.
Ez helyett...
$.noticeAdd($.extend({
text: szov,
title: cim,
type: tip,
stay: ert
}));
... ezt használd:
$.noticeAdd({
text: szov,
title: cim,
type: tip,
stay: ert
});

Szerintem így lehet, hogy jó lesz.
A hiba továbbra is fent áll, ugyan úgy. :(

Viszont megpróbálom egy más úton előidézni az üzenet dobozt. PHP-val, ahogy tanácsoltad, hogy kerüljük a javascriptet egy kicsit.
Az ötlet:
Printelem az üzenet dobozt amikor kell:
print "<div id='alertbox'>üzenet</div>";
És ezt css-el fix pozícióban mindig a képernyő közepén tartom. Viszont a bezárás gomb mindenképpen javascript lesz, amikor leveszem a display-ét az ablaknak. Tehát a js-t nem tudom megkerülni, úgy érzem...
Na de gondolkoztam, úgy érzem, ez még belefér.
Viszont azt hogy tudnám megcsinálni, hogy két féle ablak legyen? Az egyik muszáj legyen bezárni, a másik fajta pedig egy idő után (2 másodperc) automatikusan eltűnne?
Hát nem akarok okoskodni, de gondoltál arra, hogyha kikapcsolod a Javascriptet? Akkor nem tudod bezárni a dobozt, és az zavarni fogja a látogatót.

De viszont van megoldás. Nem tudom, hogy használsz-e az oldaladon jQuery UI-t. Abban van egy aranyos funkció, a dialog(). Azt pontosan ilyenhez csinálták, és tényleg szép, és jó. Bővebben:
http://jqueryui.com/demos/dialog/
Igazából az egész oldalam használhatatlan, ha a javascriptet kikapcsolja a felhasználó, úgyhogy erre nem építhetek. Ez egy online "nevelgetős" játék lesz, és szerintem azért a felhasználók többsége nem tiltogatja a javascriptet csak úgy poénból.
Persze, a JQuery-t használom, a fent nevezett probléma is abból adódott, ha visszaolvasod. :)
Csak annyi az ellentmondás a sztoriban, hogy ha ezt a JQuery-s dialogot használnám, amit te is linkeltél, és kikapcsolnám a javascriptet, akkor a JQuery sem működne. Ez csupán a probléma. :)
Egyszerűen. Adok egy kódot hozzá. Remélem nem írom el.

Az UI-t be kell tölteni, hogy működjön.
<script type="text/javascript" language="javascript">
$(document).ready(function(){
$('#egyikablak').dialog();
$('#masikablak').dialog();
var timer = setInterval(function(){
//Bezárás
$('#masikablak').dialog('destroy');
}, 2000); //2000 millisecundum, 2 ms
});
clearInterval(timer);
</script>
<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" id="egyikablak">Tartalom</div>
<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" id="masikablak">Tartalom</div>

Hogyha a JS kell hozzá, akkor meg ilyenen ne akadj fent.
Köszi szépen, de a JS-t kikerülni nem tudom semmilyen körülmény között. Van ilyen karakter öltöztetős-vetkőztetős-ruhapróbálós rész is, ahol a képek egymáson vannak css z-index-szel, és ott is js-el állítom a láthatóságot.
Viszont továbbra is fent van a labda, hogy miért hal meg az IE a JQuery-s ablakomból. :)
Az UI dialog()-tól nem hal meg. Szerintem használd azt. De ha adsz egy részletesebb forrást, akkor megnézném, hátha tudok segíteni.
Belépés
E-mail cím:
Jelszó:

RSS források
-Hírek
-Cikkek
-Fórumok
-Állás/munka
Top pontgyűjtők
»Micu1.030
»Interlock280
»mezofi150
»Pitta_100
»Frostech0100
»szbzs.2100
»Riha60
»Akhiles50
»mrchandra50
»Bakter50
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Vodka
»Joexy
»Ivn
»Balucinho
»Kelemzol
» ugrás a wikire
A nap kifejezései
»Algoritmus
»Hogyan kezdjem el
»Perl
» ugrás a wikire
Hírek
»Megérkezett a PostgreSQL 9.0 kiadásra jelölt változata
»Letölthető az új Rad Studio XE és Delphi XE
»Function-X digitális művészeti találkozó és demoscene party
»Webfejlesztőknek szóló közösségi oldalt indított a Microsoft
»Letölthető a hardvergyorsított Chrome 7 első fejlesztői kiadása
» több hír
PC Fórum hírek
»Itt az első kép az AMD nyolcmagos processzoráról
»"Szuperdizájnos" érintő-egeret mutatott be a Microsoft
»Szabadalmaztatta a számítógép kikapcsolását a Microsoft
»Vírusriadót váltott ki a webezőknél a Google
»Ingyen iWiW-ezhetnek mobiljaikról a T-Mobile-osok
»Automatikusan kiválogatja legfontosabb leveleink a Google
»OOo4Kids - ingyenes Office csomag gyerekeknek
»Új, gyorsabb Core i3 és Pentium processzorokat jelentett be az Intel
Tagi blogok
»PSP
»Első Programozó
»USB
»PHP, mint sablonmotor egyszerűen