Newsgroup: it.comp.lang.javascript
Titolo: Per Riccardo Test Img x IE

ho letto lo script, bello ma non funza su IE
io non avrei utilizzato tante belle cosette come hai fatto tu
ma semplicemente un test di un flag si o no
con IE funza bene su NS dato che il tuo funziona non ho provato
ad esempio"
<div>
<img id=Pass src="filler.gif">
</div>
<script>
 var  TestFlag=0;
function TestaPass(){
 Pass.onload =TestOK;
 Pass.onerror=TestER;
Pass.src=pw+".gif
alert ((TestFlag) ? "OK" : "Password errata");
}
 function TestOK(){ TestFlag=1; }
 function TestER(){ TestFlag=0; }

 ho letto lo script, bello ma non funza su IE
Continuo a non capirci una mazza: Mi sono perso un post, o necessito di un
caffe'?
--------------------------------
Inviato via 
http://usenet.libero.it

 caffe'?
nulla,
 Riccardo ha preso spunto da una mia idea e stava facendo uno script per
jsdir .
lo ha fatto per NS e funza ma non va su IE
dato che almeno su IE qualcosa ne capisco lo ho sfoltito e ne ho tirato
fuori una versione funzionante su IE
su NS non ho provato dato che quello di Riccardo funzionava
anche se è un po' troppo contorto per i miei gusti , io cerco sempre di
trovare la soluzione più semplice e sintetica (deformazione dell'assembly)
e dato che funziona mi sono fermato qui
lo script serve per testare una password lato client ma non comunica il nome
del file o la chiave (ogni tanto mi vengono queste idee)
si basa su un principio semplice semplice, forse troppo.
però funza e IMHO è l'unica possibile lato client.

 jsdir .
Okay, ma ripeto: Mi sono perso un post o cos'altro? Perche' di questo
discorso non vedo traccia sull'NG.


 discorso non vedo traccia sull'NG.
si rifà ad una mia vecchia risposta sul NG francamente non ricordo più in
che contesto
il buon Riccardo che ha le antenne al posto degli occhiali l'ha recepita
subito ed ha deciso di farne uno script
comunque mi ha chiesto una preventiva autorizzazione privata prima di
diffonderlo via web. è doverosa comunque una debita citazione .
in ogni caso , chiedendo umilmente scusa se non l'abbiamo preventivamente
messo in condizione di partecipare,
cosa ne pensi?
possibilmente senza cazziare troppo (ovviamente) :-)

  function TestER(){ TestFlag=0; }
Idem come Zer0. Mi sono perso qualcosa?
Poi, se il processo e' in locale dovrebbe andare, altrimenti l'alert non
aspetta certo lo scatenarsi o meno degli eventi.


manca una buona parte dello script , che sicuramente vedrete completato fra
poco dal buon Riccardo su JsDir
l'alert è stato utilizzato unicamente per far comprendere al buon Ric che
funza sarà lui poi a completarlo ed a integrarlo nel contesto originario
del resto la variabile pw da dove arriva? e a che serve?
è chiaro che questo è solo uno stralcio

 possibilmente senza cazziare troppo (ovviamente) :-)
Anche volendo non posso "cazziarti", manca tutto il background :)


 Anche volendo non posso "cazziarti", manca tutto il background :)
in effetti è nata sul NG ma in punti qua e là, poi ripresa in privato ma
solo per presa visione
comunque hai ragione (come al solito) mi annoia sta' cosa.....:-)
in ogni caso lo script passato da solo si commenta ...
manca solo la parte NS ed il form con la creazione della variabile pw ma è
intuitivo arrivarci
non mi dire che non ci hai capito nulla che non ci credo neanche se mi paghi
(dipende da quanto mi dai).
ancora non mi hai detto cosa ne pensi....

 ancora non mi hai detto cosa ne pensi....
E che ti devo dire? Di stare attento che uno non capisca il meccanismo e ti
faccia un leech della directory.. :D
.. senza contare che se per qualche motivo il browser nn ti carica
l'immagine il discorso salta. Ovvio, lato client come dicevi, piu' di tanto
non puoi fare. Quindi prendo questi script piu' come esercizio di stile che
per altro.. Ma sinceramente rimango sempre dell'idea "right tool for right
job" :)


 job" :)
grazie troppo buono
(un Blindonet Soddisfatto)

 ho letto lo script, bello ma non funza su IE
Questo lo sapevo anch'io, percio' te l'ho mandato :-)
Visto che l'idea era tua mi sembrava giusto che per primi ci si scazzasse fra 
noi due per farlo funzionare, poi semmai avremmo chiesto aiuto al NG.
Mi sembrava la cosa piu' corretta da fare.

Ok, ma questa e' una soluzione innanzitutto sbagliata (se la vedi funzionante 
su Internet e non in locale), e poi comunque banale oltre che scomoda.
Iniziamo dal "banale": non e' elegante, non mi piace... Zer0 mi capisce :-)
Continuiamo con "scomoda": l'immagine messa cosi' occupa un suo spazio nel 
documento, certo uno puo' andare a cercare di piazzarla nel punto in cui 
rompe di meno (penso al fatto che potrebbe sballare la schermata), ma vallo a 
spiegare ai niubbi nella scheda.
C'e' gente che in e-mail mi chiede come modificare i colori dei menu a 
tendina, quando gli dico di andare a leggersi la scheda nel sito [c'e' un CSS 
inline per fare questo] s'incazzano pure... con queste premesse (che 
ovviamente non conosci, ecco perche' la soluzione che cercavo e che riporto 
piu' sotto) vai a spiegare ad un niubbio-niubbissimo-scopiazzatore che deve 
impazzire per sistemare l'immagine dove sta meglio.
E se la piazzano in un layer con N4 che succede? Che mi/ti arrivano mail tipo 
"non mi funziona la password, perche'?".
Oltre al fatto che N4 non accetta width=0 e height=0 se non vado erato.
Finiamo con "sbagliata".
1.- Se lo script funziona on-line l'alert viene eseguito subito dopo 
l'assegnazione del SRC all'immagine ed il flag sara' sempre false/0 perche' 
ancora non e' scattato nessuo degli eventi che gli hai incollato.
2.- Con N4 non funziona perche' i livelli sono "document"(s) a se stanti, e 
per raggiungere un elemento dentro un livello devi accedere al document 
(document.layers.nomelivello.document.nomeimmagine.src...)
Ok, finita la cazziata segue lo script che ho fatto e che ho inviato per 
posta a Blindonet.
La textarea e' solo di lavoro e serve per visualizzare le proprieta' di 
"evento".
Il problema (v. commento) e' che mentre N4 e Mozilla generano l'evento (un 
oggetto o pseudo-oggetto a quel che mi sembra di capire), IE se n'esce con un 
"undefined" :-O
<HTML>
<HEAD>
   <TITLE>Password</TITLE>
<SCRIPT>
<!--
function check()
   {
   pw=document.modulo.pwd.value;
   var pcheck=new Image();
   pcheck.onload=verifica;
   pcheck.onerror=verifica;
   document.pcheck.src=pw+".gif";
   }
function verifica(evento)
   {
   /* --------------------------------------------------------
   Non funziona con IE perche' "evento" e' undefined
   quindi questa funzione da errore
   ----------------------------------------------------------- */
   if (evento.type == "load")
      document.modulo.pwd.value=" O K ! ! !";
   else
      document.modulo.pwd.value="Pwd errata";
 
   // ---- elenco proprieta' di "evento" nella textarea per controllarle
   // ---- la proprieta' che uso per la verifica e' "type"
   document.modulo.prova.value=""
   for (props in evento)
      document.modulo.prova.value+=props+" - "+evento[props]+"\n";
   }
//-->
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#ffffff">
<form name=modulo>
<INPUT TYPE='text' NAME='pwd' VALUE='' CLASS=''>
<INPUT TYPE='button' VALUE='clicca' onClick='check()'> <BR>
<TEXTAREA NAME='prova' ROWS='30' COLS='60' WRAP='hard' CLASS=''>
</TEXTAREA>
</form>
</BODY>
</HTML>
L'immagine/password ovviamente e' una gif 1 pixel 2 colori, 34 byte.
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

    }
...mi ripeto: "Homo distractus".
Qui non verra' mai scatenato nessun evento: hai assegnato gli hanlders ad
oggetto javascript e cambiato la proprieta' di un oggetto nel documento.
Ad ogni modo il tuo problema con IE si risolve aggiungendo questa riga
all'inizio della funzione "verifica":
if(!evento) var evento=event;
In IE l'evento e' "automaticamente" passato alla function (ovvero non c'e'
bisogno di includerlo nell'elenco degli argomenti) come oggetto "event".

 bisogno di includerlo nell'elenco degli argomenti) come oggetto "event".
Uhm... non lo sapevo, nel sito di microsoft mi ci sono sempre perso... ecco 
perche' ho deciso di abbandonarlo e passare ad altro entro un anno :-)


 perche' ho deciso di abbandonarlo e passare ad altro entro un anno :-)
A cosa, per curiosita'?
Io sogno sempre piu' spesso un orticello e una stalla, con qualche vacca
destinata ad una tragica ma onorevole fine...

 bisogno di includerlo nell'elenco degli argomenti) come oggetto "event".
Tsk, tsk. Non e' sempre vero. In generale, la cosa migliore e' passarlo come
parametro alla funzione, non tanto per una maggiore compatibilita', ma
perche' non sempre l'evento della finestra, corrisponde all'evento da noi
cercato.. (chi scrive web-app critiche sa a cosa mi riferisco).


 perche' ho deciso di abbandonarlo e passare ad altro entro un anno :-)
PHP/MySQL/Linux a gogo?
.. Ma dovrai sempre supportare un minimo IE, presumo, e queste cose vanno
sapute. ;)
Te pensa la mia jella adesso: A lavoro mi tocca codare nel vecchio ASP...
ne' 
ASP.NET
 ne' PHP.. sto ovviamente spingendo per cambiare discorso (ho
appena fatto richiesta di una nuova macchina di test.. se va bene ci arriva
tra 15 giorni.. speriamo).. ma nel frattempo soffro, incredibilmente
soffro..
Meno male che ho visual studio .net e l'utilizzo di Javascript in ASP che
"un po' " allietano questo dolore.. ma non basta.. :°


 chi viene da ASP.
Allo scope, al segno del dollaro, ed al "punto" come concatenazione,
sentendo Riccardo.. :)
Ma alla fine, si scopre che tutto cio' non solo e' bellissimo, ma e' anche
utilissimo e molto piu' "performante" e veloce nella stesura.. e' proprio un
linguaggio fatto dai programmatori per i programmatori. :)


 evento=evento||event;
Tutto ok, però il problema a me sembra un altro. IE dà l'impressione di
non riconoscere l'evento onError; il mancato caricamento dell'immagine
sembra che non produca questo evento.
Maurizio.

 cercato.. (chi scrive web-app critiche sa a cosa mi riferisco).
Dato che la propagazione degli eventi di IE (bubbling a sentir loro) parte
dall'oggetto su cui e' stato scatenato l'evento per poi risalire la
gerarchia fino a document e window, mi sentirei abbastanza sicuro di cosa mi
arriva.
Ci saranno casi particolari, ma non me ne vengono sicuramente in mente al
mattino.
Fammi un esempio, please.

 sembra che non produca questo evento.
Veramente problemi di event handlers sulle immagini li ho avuti solo con
NS4.x
Puoi postare codice incriminato?

 mattino.
Quando hai una struttura REALMENTE complessa, devi riferirti all'evento
dell'oggetto e non della finestra, altrimenti scazzi alla grande.
Solo una volta (e questo puoi considerarlo un caso particolare) riscontrai
la cosa anche in un sito (che per loro natura, sono decisamente meno
complessi e piu' semplici).
L'esempio quindi non sarebbe di due righe, ma dovrei analizzarti tutta una
struttura di una webapp (la cosa difatti la capii/trovai solo perche' ci
sbattei il muso).
Se ti metterai a fare webappz pese, ci sbatterai la capoccia anche tu.. La
cosa cmq era riferita all'handling degli eventi fatto in modo particolare.


 sembra che non produca questo evento.
Ah, questo lo ignoro. Visto che gia' Andrea s'era messo ad analizzare il
codice, e c'erano gia' sufficienti post addietro, non mi sono proprio messo
a verificarlo anche io, ma solo a "correggere" un paio di cose che erano
state dette. Il source originale proprio nn l'ho considerato. ^_^
Cmq sia, l'errore iniziale era sicuramente la mancata gestione dell'evento,
come faceva notare Andrea. In secondo luogo, l'evento onerror sulle IMG IE
lo gestisce senza troppi problemi.
Cmq, se ti pare che il problema sia un altro, gli daro' un occhiata rapida.


 sembra che non produca questo evento.
Ho controllato: A me funzia che e' una meraviglia. Perche' dici che IE ti
da' l'impressione di non riconoscere l'evento onerror?


 Iniziamo dal "banale": non e' elegante, non mi piace... Zer0 mi capisce
:-)
ghgh ^__^"
Un ultimo appunto: Adesso lo script e' funzionante, ma la domanda e'.. mo'
come lo implementi? ^_^ Se io scrivo l'url di un immagine qualunque (gif,
senza estensione), lui mi dice "uhao, password corretta!" :)
Dovresti quanto meno implementare un controllo sul dominio, nella verifica,
ma non basta.
Magari fai una gif "di un certo tipo", per evitare che qualsiasi altra gif
possa essere considerata valida..
P.S.
Come ho gia' detto a blindonet, considero tutto questo un gioco, un
esercizio di stile.


 Puoi postare codice incriminato?
In realtą ora ho riprovato il codice e sembra funzionare, ma in modo strano.
Se scrivo nel campo di testo il nome di un'immagine esistente immediatamente
nella textfield viene stampato "Immagine caricata". Invece, se l'immagine
non esiste, IE sembra insensibile al primo click, mentre risponde al secondo
click. Questo solo appena si carica la pagina.
    var img=new Image();
    var txtfld;
    function carica(f) {
        txtfld = f;
        img.src=f.value;
        img.onload=loaded;
        img.onerror=errore;
    }
    function loaded() {
        txtfld.value = "Immagine caricata";
    }
    function errore() {
        txtfld.value = "Errore";
    }
    <form>
        <INPUT TYPE='text' NAME='immagine'>
        <INPUT TYPE='button' VALUE='carica' onClick='carica(immagine)'>
    </form>
Maurizio.

 destinata ad una tragica ma onorevole fine...
A me bastano e avanzano tre gatti per casa... ho appena finito di pulire dove 
il cucciolo si e' fatto la pipi' questa notte :-) 


     }
Qui sta l'errore.
Gli event handlers comunicano al programma cosa fare quando avverra'
(futuro) l'evento. E' buona norma definire gli handlers prima di manipolare
gli oggetti.
Tu hai subito impostato la proprieta' src e in locale il caricamento puo'
avvenire prima che i gestori di eventi vengano assegnati: ergo funziona al
secondo click.

 il cucciolo si e' fatto la pipi' questa notte :-)
Anche per quello. Pure io sono felinomane e preferirei che pisciasse in
campagna...

 esercizio di stile.
No, io invece questa cosa la vedo come una soluzione semplice (niente 
algoritmi, cifrature strane etc) e definitiva alla protezione di una pagina 
con script client-side.
Fermi restando tutti gli altri problemi (cache, location etc.) mi sembra un 
ottimo metodo per controllare una pwd.


 "un po' " allietano questo dolore.. ma non basta.. :°
No, guarda, se col PHP trovo la pace io saro' uno di quelli che dice "lascia 
perdere ASP/M$ e passa a PHP/mySQL".
Almeno finche' non mi trovero' nella tua situazione :-)


 ergo funziona al secondo click.
Non metto in dubbio che ci sia un errore nello script, però qualcosa di
strano c'è lo stesso: se l'immagine viene trovata non c'è mai bisogno di un
secondo click e con NS, invece, non c'è alcun problema. In locale, credo che
ci voglia più tempo a controllare tutta la cartella alla ricerca di un file
piuttosto che caricare un'immagine dalla cache. Mi aspetterei il doppio
click se l'immagine viene trovata.
Maurizio.


Le differenze con NS dipenderanno sicuramente dal modo che ha l'engine di
gestire il codice, ma non lo prenderei come dato di fatto: per logica
ribadisco di assegnare prima gli handlers.
Il tempo di caricamento tra cache e una cartella direi che dovrebbe essere
piu' o meno lo stesso: il browser ha comunque a disposizione un percorso
(vero che nel secondo caso non e' un parametro stabilito internamente, ma
insomma).
A riprova di questo c'e' il caso di onerror: non potendo accedere al file
l'assegnazione della proprieta' src e' istantanea, mentre nell'altro caso ci
sono i millisecondi necessari al loading che danno il tempo al codice di
assegnare l'handler.

 prima gli handlers.
Il tuo ragionamento è corretto. Ho messo in pratica i tuoi suggerimenti e
tutto funziona alla perfezione.
Maurizio.

 ottimo metodo per controllare una pwd.
Cache soprattutto. In pratica la pw rimane sul client ^_^"
Se avessi per le mani un qualsiasi PC che ha avuto l'accesso a quel sito,
senza neanche spulciare la cache mi basterebbe mettere il browser in
modalita' offline e recuperare la location derivata.
.. poi devi stare attento che i motori di ricerca non indicizzino le "pagine
password" :D


 That's the better way & it's very cool! =)
Si, molto elegante.
Ok, domani lo provo in situazione reale (on-line).
