può il refresh php pasticciare con i browser?!
può il refresh php pasticciare con i browser?! postato il 20/08/2012 19:25:52 nel forum programmazione, open source e hosting
Ciao ragazzi, spero che abbiate o stiate o stiate per passato/passare una buona estate, anche se il caldo in genere è exagerate e un pò di neve a sto punto sarebbe gradita!
Detto questo, dopo qualche giorno di immensi punti di domanda mi si è ripresentato un problema di cross browsing che pensavo aver risolto proprio qui, mesi fa, con l'aiuto del solito e disponibilissimo leoblacksoul.
Si parlava del miglior metodo per effettuare dei refresh automatici e dopo aver testato e valutato le (tantissime) varie soluzioni optai per fare dei refresh utilizzando proprio il linguaggio php, che a rigor di logica DEVE essere supportato da qualunque browser senza se e senza ma. Inoltre è semplicissimo. Nella fattispecie dopo l'apertura della sessione si utilizza un header("Refresh: 30";);
Ora, come si può spiegare che questo metodo non venga rilevato da Safari o Chrome? Addirittura chrome totalmente a cavoli suoi, nel senso che in una pagina va, nell'altra no, e si che la posizione dell'header ha pochi compromessi, è sempre sotto il session start(). Safari invece non lo prende da nessuna parte.
Com'è possibile che un browser che naturalmente legge il php non legga invece un refresh scritto in php?
Pagine → 1
20/08/2012 19:35:45 e modificato da ft_staff il 20/08/2012 19:36:32
nuprestige ha scritto:
Com'è possibile che un browser che naturalmente legge il php non legga invece un refresh scritto in php?
Beh l'errore è questo concetto.
Il browser non legge php, lo fa il server.
Quando via PHP definisci la funzione header stai indicando al server di mandare, assieme a quella pagina, un intestazione http al browser.
Quel browser dopo seguirà le istruzioni http a seconda di come è stato costruito e se segue o meno gli standard del protocollo.
Allora c'è un modo per fare un refresh automatico universale dopo tot tempo ? No, qualsiasi soluzione adottata potrebbe incappare in una situazione in cui non è valida.
La soluzione ? Inserire un link alternativo che può essere azionato manualmente con un click.
In questo modo se falliscono tutte le opzioni automatizzate rimane all'utente la possibilità di eseguire il redirect.
21/08/2012 14:27:10
Ti ringrazio moltissimo per avermi spiegato per bene come funziona la cosa, c'era una parte che mi sfuggiva, ora è chiaro il come possa non funzionare su un paio di browser.
Ad ogni modo, il tasto manuale c'è, infatti il problema non è pregiudicante è che io cerco sempre di ottenere il massimo di quello che si può fare.
A questo punto, sarà meglio inserire un refresh automatico javascript? Una cosa semplice tipo:
<SCRIPT language="JavaScript">
function doRefresh() {
document.location.reload();
}
window.setTimeout("doRefresh();" , 30000);
</SCRIPT>
Funziona anche sui due browser che mi davano problemi, e credo quindi funzioni dappertutto a patto che non si abbia javascript disabilitato, ma la percentuale di chi lo disabilita è bassissima. Forse il gioco vale la candela...?
21/08/2012 19:57:43
nuprestige ha scritto: Ti ringrazio moltissimo per avermi spiegato per bene come funziona la cosa, c'era una parte che mi sfuggiva, ora è chiaro il come possa non funzionare su un paio di browser.
Di nulla!
Ad ogni modo, il tasto manuale c'è, infatti il problema non è pregiudicante è che io cerco sempre di ottenere il massimo di quello che si può fare.
A questo punto, sarà meglio inserire un refresh automatico javascript? Una cosa semplice tipo:
<SCRIPT language="JavaScript">
function doRefresh() {
document.location.reload();
}
window.setTimeout("doRefresh();" , 30000);
</SCRIPT>
Funziona anche sui due browser che mi davano problemi, e credo quindi funzioni dappertutto a patto che non si abbia javascript disabilitato, ma la percentuale di chi lo disabilita è bassissima. Forse il gioco vale la candela...?
Per quello che ci riguarda, abbiamo preso coscenza del fatto che non abbiamo tempo ne energie per costruire un sito completamente accessibile anche in assenza di javascript, pertanto richiediamo che per poter giocare da noi siano abilitati.
In sostanza, per un hobby come quello dei gdr online by chat non mi porrei neanche la domanda.
Se proprio vuoi essere pignolo comunque, puoi usare una funzione del genere:
<?php
function refreshThisPage($second)
{
if (!headers_sent())
{
header("Refresh: 30";);
}else
{
echo '<script>...script di refresh js...</script>',
'<noscript>ci infili qui il meta refresh</noscript>';
}
}
?>
E la richiami sia prima di printare l'output e poi stesso nell'output all'interno del tag head della pagina.
21/08/2012 21:58:25
Grazie mille, credo che ci metterò il refresh js senza ricorrere alla combinazione che mi hai scritto nel caso in cui l'header non dovesse funzionare, anche perchè, riflettendo su quello che hai detto, chi dovesse avere js disabilitato avrebbe problemi ben più grossi del refresh dato che il sito ha altri script js jquery e compagnia bella, quindi come dici tu, se uno ci vuole entrare deve necessariamente essere consapevole che js non può essere disattivato, e di conseguenza il refresh js andrà più che bene!
Sei stato gentilissimo! Ti ringrazio!
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
CRSED: F.O.A.D. ↗
Seconda Era ↗
State of Survival ↗
Hero Wars ↗