Newsgroup: it.comp.lang.javascript
Titolo: lo facciamo assieme?

'o famo strano ?!?
Nulla di tutto questo [almeno per questa volta :)) ]
Immaginiamo di voler creare una semplice utility che permetta di 
indagare un oggetto.
Questa ne è un piccolo esempio funzionante.
____________________________________________________________________________________
<html>
<head>
<title>esamina un oggetto JavaScript</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
<!--
function esame(){
  var obj = document.forms['ricerca'].oggetto.value;
  var rep = 'oggetto\t\tvalore\n';
     rep += '¯¯¯¯¯¯¯\t\t¯¯¯¯¯¯\n';
  for(i in obj){
   rep += i + '\t\t' + obj[i] + '\n';
  }
  document.forms['report'].risposta.value = rep;
}
function seleziona(){
  var tArea = document.forms['report'].risposta;
  with(tArea){
   select();
   focus();
  }
}
//-->
</script>
<style type="text/css">
<!--
  textarea {
   font-family: "Courier New", Courier, mono;
   font-size: 14px;
   color: #FFFFFF;
   background-color: #006699
}
  body {
   font-family: Arial, Helvetica, sans-serif;
   font-size: 12px;
   color: #FFFFFF
}
  h1 {
   font-size: 16px;
   font-weight: bold
}
  input{
   font-family: "Courier New", Courier, mono;
   font-size: 14px;
   color: #FFFFFF;
   background-color: #006699
}
  #testo{
   color: #99FF99;
   background-color: #112211
}
  #tasto{
   color: #CC8066;
   background-color: #4D1A1A
}
hr {
   color: #6699FF;
   background-color: #6699FF
}
-->
</style>
</head>
<body bgcolor="#223355" leftmargin="15" topmargin="15" marginwidth="15" 
marginheight="15">
<h1>inserisci l'oggetto da ricercare</h1>
<form name="ricerca" >
  <input type="text" name="oggetto" size="16" id="testo">
  <br>
  <input type="button" name="ok" value="cerca" onClick="esame()" id="tasto">
  <input type="reset" name="resetOggetto" value="canc " id="tasto">
</form>
<hr width="100%" size="1" id="divisione" noshade align="left">
<br>
<form name="report" >
  <input type="reset" name="resetRisposta" value="cancella" id="tasto">
  <input type="button" name="sel" value="seleziona" 
onClick="seleziona()" id="tasto">
  <br>
  <textarea name="risposta" cols="80" rows="5" wrap="OFF" 
id="testo"></textarea>
</form>
</body>
</html>
____________________________________________________________________________________
se assumiamo l'oggetto della ricerca con
  var obj = document.forms['ricerca'].oggetto.value;
  di fatto passiamo una stringa con risultati ben lontani da quelli 
desiderati ...
  ad esempio, digitando  window  nel form, otteniamo
  con NN6 e NN4.73
  oggetto valore
  ¯¯¯¯¯¯¯ ¯¯¯¯¯¯
    0       w
    1       i
    2       n
    3       d
    4       o
    5       w
con IE5.5
  oggetto valore
  ¯¯¯¯¯¯¯ ¯¯¯¯¯¯
... e la cosa finisce qui ... mah ...
  con Opera 5.0
  oggetto valore
  ¯¯¯¯¯¯¯ ¯¯¯¯¯¯
fontsize 
 
function fontsize() {
     [native code]
}
link 
 
function link() {
     [native code]
}
ancora più strano ... :)
se invece modifichiamo la funzione indicando l'oggetto della
ricerca direttamente via codice, per intenderci
  var obj = window;
allora i risultati sono decisamente più interessanti.
riporto solo per NN6 ...
oggetto 
	valore
¯¯¯¯¯¯¯ 
	¯¯¯¯¯¯
parent          [object Window]
scrollbars      [object BarProp]
frames          [object WindowCollection]
name
scrollX         0
scrollY         0
window          [object Window]
self            [object Window]
navigator       [object Navigator]
screen          [object Screen]
history         [object History]
statusbar       [object BarProp]
directories     [object BarProp]
closed          false
crypto          [object Crypto]
pkcs11          [object Pkcs11]
opener          null
status
defaultStatus
location        file:///C:/WINDOWS/Desktop/ricerca.htm?oggetto=document
title
innerWidth      733
innerHeight     330
outerWidth      741
outerHeight     487
screenX         818
screenY         658
pageXOffset     0
pageYOffset     0
length          0
onmousedown     undefined
onmouseup       undefined
onclick         undefined
onmouseover     undefined
onmouseout      undefined
onkeydown       undefined
onkeyup         undefined
onkeypress      undefined
onmousemove     undefined
onfocus         undefined
onblur          undefined
onsubmit        undefined
onreset         undefined
onchange        undefined
onselect        undefined
onload          undefined
onunload        undefined
onclose         undefined
onabort         undefined
onerror         undefined
onpaint         undefined
ondragdrop      undefined
onresize        undefined
onscroll        undefined
document        [object HTMLDocument]
Components      [xpconnect wrapped nsIXPCComponents]
esame
function esame() {
var obj = window;
var rep = "oggetto\t\tvalore\n";
rep += "\xAF\xAF\xAF\xAF\xAF\xAF\xAF\t\t\xAF\xAF\xAF\xAF\xAF\xAF\n";
for (i in obj) {
rep += i + "\t\t" + obj[i] + "\n";
}
document.forms.report.risposta.value = rep;
}
seleziona 
 
function seleziona() {
var tArea = document.forms.report.risposta;
with (tArea) {
select();
focus();
}
}
top             [object Window]
_content        [object Window]
sidebar         [xpconnect wrapped nsISidebar]
prompter        [xpconnect wrapped nsIPrompt]
menubar         [object BarProp]
toolbar         [object BarProp]
locationbar     [object BarProp]
personalbar     [object BarProp]
controllers     [xpconnect wrapped nsIControllers]
per la cronaca, con IExplorer la lista è ancora più lunga !!! :))
Opera invece non da' segni di vita [non ama il for(i in ...)???]
OK, spero che qualcuno sia arrivato alla fine di questo papiro e mi 
possa aiutare.
Stavo pensando infatti ad un piccolo tool per 'esplorare' un po' il modo 
in cui
i vari browser interpretano il codice HTML.
Visto che il DOM rimane un po' oscuro [almeno a volte] ...
Se riuscissimo a farlo bene [le risposte potebbero essere riportate 
mediante
documenti stilati al volo in nuove finestre con window.open e 
document.write ...],
potremmo metterlo a disposizione di tutti, magari in JsPoint.
Ciao!
Daniele

 potremmo metterlo a disposizione di tutti, magari in JsPoint.
Purtroppo non posso impegnarmi attivamente anche se la cosa mi stuzzica non 
poco (mancanza di tempo), ma non disperare, conosco almeno tre persone qui nel 
NG che ci si butteranno a tuffo.... :-)
Quanto a JsDir (JsPoint), saremo ben lieti di far da tramite, vista anche la 
cronica mancanza di documentazione per NN6... a parte i tutorial di Fabiano, 
Paolo Carena e pippopd! :-)  (spero di non dimenticare nessuno)
Dopotutto il sito è nato per questo!
 
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
------------------------------------------------------------------------
               Nessun traguardo è abbastanza lontano.
------------------------------------------------------------------------

 potremmo metterlo a disposizione di tutti, magari in JsPoint.
Per il DOM W3C, utilizzato da NS6 e IE5, c'e' uno script su jsdir che
visualizza su una nuova finestra la struttura fino a 3 livelli.
Per verificare tutte le le proprieta' di un oggetto( soprattutto lo uso
per verificare i layers in NS4.x quando non si comportano come vorrei)
uso uno script simile al tuo che inserisco in fondo alla pagina e mi
visualizza i risultati in una nuova finestra:
--------
<form>
Inserisci oggetto<INPUT type="text" id=oggetto name=oggetto>
<INPUT type="button" value="Mostra" id=button1 name=button1
onClick="mostra(this.form.oggetto.value)">
</form>
</BODY>
</HTML>
<script language=JavaScript>
<!--
function mostra(nomeOggetto){
 oggetto=eval(nomeOggetto);
  var risultato=" "
  for (var ogniProprieta in oggetto){
   risultato += nomeOggetto + "."+ ogniProprieta+" = "+
oggetto[ogniProprieta]+ "\n<BR>"
  }
  risultato += "<hr>"
  aa=window.open("",'nuova');
  aa.document.write(risultato)
  aa.document.close();
}
// -->
</script>
--------------
Saluti, Paolo

Visto che il DOM rimane un po' oscuro [almeno a volte] ...
su jsdir c'e' un gran script di Pippopd che esprime in tabella il Dom
di una pagina fino al terzo livello.
Il tutto mi pare interessante chi rilancia con qualche osservazione?
Ciao

grazie a tutti, veramente!
quella dell' eval() proprio non mi era venuta in mente. :)
Adesso dò un'occhio allo script in JsDir che mi avete segnalato.
Ciao!
E' bello poter contare su qualcuno ... ;)

Mi ricordo il vecchio script di Ro<*¿*>berto... getProperties.js
Funziona alla grande, lo sto utilizzando per controllare i nuovi oggetti di
NS6.

cliccate su cerca <BR>
i termini in rosso che appariranno qui sono cliccabili, non sempre in
modo
utile...
<BR>
al momento solo per ie5 e NN6 com molta vergogna</div>
</body>
<script language="javascript">
</script>
</html>

 wrote:
[]
Ho provato a fare alcune modifiche/aggiunte:
-aggiunta del tasto *prec.* per ritornare alla situazione
precedente e della relativa funzione
-aggiunta del tasto *opener* per l'utilizzo come nuova finestra per
verificare una qualsiasi pagina
-aggiunta del tasto *questa* al posto di cerca e canc
- aggiunta di un controllo per gli attributi innerHTML ..... (creano, in
alcuni casi, dei problemi) che elimina la visualizzazione del valore
-modifica della funzione aggiungi() perche' funzionino correttamente i
valori numerici
-aggiunte per visualizzare i *childNode* e *attributes* con NS6 che si
comportano diversamente da IE
-modifiche ai layer per la visualizzazione anche con NS4 (ora
funzionante); ho usato i tag *layer**nolayer* perche' NS6 visualizza per
intero un layer assoluto anche se interno a un layer relativo. ???
Per l'utilizzo da un altra pagina inserire:
window.open('attributi.htm','dom','scrollbars=no,resizable=no,width=300,
height=500,directories=no,status=no,menubar=no,toolbar=no,top=0,left=480
')
Saluti, Paolo
-----------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>esamina un oggetto JavaScript o meglio conosci il tuo browser e
la tua pagina</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
  textarea {
   font-family: "Courier New", Courier, mono;
   font-size: 14px;
   color: #FFFFFF;
   background-color: #006699
}
A:link {
 font-size: 12px;
 color: red;
 text-decoration: none
}
  body {
   font-family: Arial, Helvetica, sans-serif;
   font-size: 12px;
   color: #FFFFFF
}
  h1 {
   font-size: 16px;
   font-weight: bold
}
  input{
   font-family: "Courier New", Courier, mono;
   font-size: 14px;
   color: #FFFFFF;
   background-color: #006699
}
  #testo{
   color: #99FF99;
   background-color: #112211
}
  #tasto{
   color: #CC8066;
   background-color: #4D1A1A
}
hr {
   color: #6699FF;
   background-color: #6699FF
}
 td.cliccabile{ font-size: 12px; color: red}
td.oggetto{ font-size: 12px;}
#contenitore {
 position: relative;
 width: 280px;
 height: 320px;
}
-->
</style>
<script language="javascript" type="text/javascript">
<!--
function aggiungi(q){
 (isNaN(q))?
 document.forms['ricerca'].oggetto.value+='.'+q:
 document.forms['ricerca'].oggetto.value+='['+q+']';
 esame();
}
function ritorna (){
 pluto=document.forms['ricerca'].oggetto.value;
pos=(pluto.lastIndexOf('[')>pluto.lastIndexOf('.'))?pluto.lastIndexOf('[
'):pluto.lastIndexOf('.')
 if (pos>0) document.forms['ricerca'].oggetto.value=pluto.substr(0,pos);
 esame()
}
function esame(){
 var obj = eval(document.forms['ricerca'].oggetto.value)
 var rep ='<table border=0>'
// versione con sort per ordinare la visualizzazione anche con NS
 aObj= new Array;
 c=0;
 for(i in obj){
  aObj[c]= new Array(i,''+obj[i]);
  c++
 }
 contrNS6='no'
 if (window.navigator.userAgent.indexOf('Netscape6')>=0){
  aChiavi= new Array('childNodes','attributes')
  test=document.forms['ricerca'].oggetto.value;
  for (i=0; i<aChiavi.length;i++){
   if (test.indexOf(aChiavi[i])==(test.length-aChiavi[i].length))
contrNS6='OK';
  }
  if (contrNS6=='OK'){
   for(i=0; i<obj.length;i++){
    aObj[c]= new Array(''+i,''+obj[i].nodeName);
    c++
   }
  }
 }
 file://if (!document.all )aObj.sort();
 if (window.navigator.userAgent.indexOf('Netscape')>=0 &&
contrNS6!='OK')aObj.sort();
 for (i=0; i<aObj.length; i++){
  rep +='<tr><td class=cliccabile><a href=# onclick="nome(this);return
false">'+aObj[i][0]+ '</a></td>'
  if (aObj[i][0].indexOf('HTML')<0 && aObj[i][0].indexOf('innerText')<0
&& aObj[i][0].indexOf('outerText')<0)
  rep+= '<td class=oggetto>' + aObj[i][1] + '</td></tr>';
  else rep+= '<td class=oggetto>....</td></tr>';
 rep+='<tr>'
 }
// fine versione con sort
/* // versione normale
 for(i in obj){
  rep +='<tr><td class=cliccabile><a href="javascript:void(0)"
onclick="nome(this);return false">'+ i+ '</a></td>'
  if (i.indexOf('HTML')<0 && i.indexOf('innerText')<0 &&
i.indexOf('outerText')<0)
  rep+= '<td class=oggetto>' + obj[i] + '</td></tr>';
  else rep+= '<td class=oggetto>....</td></tr>';
 }
*/ // fine versione normale
 rep+='</table>'
 if (document.layers) {
document.layers['contenitore'].document.layers['piccolo'].document.open(
);
document.layers['contenitore'].document.layers['piccolo'].document.write
(rep);
document.layers['contenitore'].document.layers['piccolo'].document.close
();
  document.layers['contenitore'].document.layers['piccolo'].moveTo(0,0)
 } else  document.getElementById('piccolo').innerHTML = rep;
}
function seleziona(){
  var tArea = document.forms['report'].risposta;
  with(tArea){
   select();
   focus();
  }
}
// -->
</script>
<script language="javascript" type="text/javascript">
function nome(obj){
/* self.onerror=function(){
  alert('errore');
  self.location.reload();
  return true;
 }*/
// alert(obj.text)
 q= (document.layers)? obj.text: obj.firstChild.data
 aggiungi(q)
}
</script>
<script language="javascript" type="text/javascript">
<!--
function scrolla(dir){
 qt=(dir=='su')?-10:10;
 scrolla1();
}
function scrolla1(){
 document.layers['contenitore'].document.layers['piccolo'].moveBy(0,qt)
 zz=setTimeout('scrolla1()',150)
}
// -->
</script>
<head>
<body bgcolor="#223355" vlink=#ff0000 topmargin="15" marginwidth="15"
marginheight="15" link=#ff0000 >
<h1>inserisci l'oggetto da ricercare</h1>
<form name="ricerca" onSubmit="esame();return false">
  <input type="text" name="oggetto" size="30"
id="testo"value=window><br>
  <input type="button" name="ok" value="questa"
onClick="this.form.oggetto.value='window';esame()">
  <input type="button" name="ok" value="opener"
onClick="this.form.oggetto.value='opener';esame()">
  <input type="button" name="rit" value="prec." onClick=ritorna()>
</form>
<hr width="100%" size="1" id="divisione" noshade align="left">
<SCRIPT LANGUAGE=javascript>
<!--
if (document.layers) {
document.write('<a href=# onMouseOver="scrolla(\'su\')"
onMouseOut="clearTimeout(zz)" >Su</a>');
document.write('&nbsp;&nbsp;<a href=# onMouseOver="scrolla(\'giu\')"
onMouseOut="clearTimeout(zz)" >Giu</a>');
document.write('&nbsp;&nbsp;&nbsp;&nbsp;<a href=#
onClick="aggiungi(\'layers\');return false" >Aggiungi layers</a>');
document.write('&nbsp;&nbsp;&nbsp;&nbsp;<a href=#
onClick="aggiungi(\'document\');return false" >Aggiungi document</a>');
document.write('<hr width="100%" size="1" id="divisione" noshade
align="left">');
}
// -->
</SCRIPT>
<br>
<ilayer name="contenitore" height=320>
<layer name="piccolo" STYLE="position: absolute;">
<SCRIPT LANGUAGE=javascript>
<!--
if (document.layers)document.write('i termini in rosso che appariranno
qui sono cliccabili, non sempre in modo utile.....<BR>')
file://-->
</SCRIPT>
</layer>
</ilayer>
<nolayer>
<DIV id="piccolo" STYLE="width: 280px; height: 320px; overflow:
scroll;">cliccate su questa o opener <BR>
i termini in rosso che appariranno qui sono cliccabili, non sempre in
modo
utile...
</div>
</nolayer>
</body>
</html>
-----------------

intero un layer assoluto anche se interno a un layer relativo. ???
Il piccolo sta crescendo :) e quasi pronto a cambiare nome...
Pippopd, non che ne dubitassi ma la classe non e' acqua...
Ero andato avanti anche io un po' con il ritorno ma niente di
paragonabile come completezza.
Almeno salvo due cose che mi pare possano servire
osservazioni
non obbligherei a partire da 'window' o meglio lo lascerei come value
del input di tipo text ma non glielo passeri obbligatoriamente all'
onclick, per lasciare liberta' di inizio ricerca
altrimenti chi usa IE non potra' mai vedere il dom. 
Se non sbaglio almeno dovremmo poter passare dal form un
'document.body'
per poter vedere un firstChild elencato come oggetto, e ora non
sarebbe possibile (almeno con IE5 [non 5.5] non ci arrivo partendo da
window e l' onclick mi impedisce di scegliere la porta di ingresso)
Dato pero' che il solo 'document' in IE non e' compreso nel DOM
o facciamo un controllo all' inizio, per IE, che se il value e'
'document' [document.all deve essere accettato come document.body]
gli aggiungiamo almeno '.all' o inseriamo un gestore di errore a
livello di window che, se si scatena, resetta il form (che si
riportera' a window di setaggio iniziale)
Questa seconda ipotesi mi pare migliore 
io ho inserito
dopo un tag <script etc> a caso in verita'
window.onerror=function(){alert('errore');
ritorna();return true;}
e in ritorna()
dopo
 if (pos>0)
document.forms['ricerca'].oggetto.value=pluto.substr(0,pos);
ho inserito un 
else document.forms['ricerca'].reset()
e poi la chiamata a esame().
Ancora una nota per NN6
se non si pulisce il div piccolo esplicitamente
almeno il mio NN6 sul mio computer
ha problemi talvolta  di visualizzazione
[prova il percorso
window.navigator.mimeTypes
a me cosi' non fa vedere nulla ma _so che c'č_ un length
e ancora piu' spesso nei percorsi a ritroso]
che supero inserendo in esame()
come prima istruzione
function
esame(){if(document.getElementById){document.getElementById('piccolo').innerHTML=''}
e poi tutto uguale
ti metto il codice completo qui sotto, se i riferimenti qui sopra non
sono sufficienti a vedere le mie proproste di modifiche
(cosi' impazzisci anche tu a riallineare... :D   )
Ciao, Paolo alias pippopd
				Paolo








window.onerror=function(){alert('errore');
ritorna();return true;}
<!--
function aggiungi(q){
 (isNaN(q))? document.forms['ricerca'].oggetto.value+='.'+q:
document.forms['ricerca'].oggetto.value+='['+q+']'; esame();
}
function ritorna
(){if(document.getElementById){document.getElementById('piccolo').innerHTML=''}
 pluto=document.forms['ricerca'].oggetto.value;
//alert(pluto)
pos=(pluto.lastIndexOf('[')>pluto.lastIndexOf('.'))?pluto.lastIndexOf('['):pluto.lastIndexOf('.')
//alert(pos)
 if (pos>0)
document.forms['ricerca'].oggetto.value=pluto.substr(0,pos);
else document.forms['ricerca'].reset()
 esame()
}
function
esame(){if(document.getElementById){document.getElementById('piccolo').innerHTML=''}
 var obj = eval(document.forms['ricerca'].oggetto.value)
 var rep ='<table border=0>'
// versione con sort per ordinare la visualizzazione anche con NS
 aObj= new Array;
 c=0;
 for(i in obj){
  aObj[c]= new Array(i,''+obj[i]);
  c++
 }
 contrNS6='no'
if (window.navigator.userAgent.indexOf('Netscape6')>=0)
{
  aChiavi= new Array('childNodes','attributes')
  test=document.forms['ricerca'].oggetto.value;
  for (i=0; i<aChiavi.length;i++){
   if (test.indexOf(aChiavi[i])==(test.length-aChiavi[i].length))
contrNS6='OK';
  }
  if (contrNS6=='OK'){
   for(i=0; i<obj.length;i++){
    aObj[c]= new Array(''+i,''+obj[i].nodeName);
    c++
   }
  }
 }
//if (!document.all )aObj.sort();
 if (window.navigator.userAgent.indexOf('Netscape')>=0
&&contrNS6!='OK')aObj.sort();
 for (i=0; i<aObj.length; i++){
  rep +='<tr><td class=cliccabile><a href=# onclick=nome(this);return






}

// -->
</script>



onClick="esame()">

</form>


qui sono cliccabili, non sempre in modo utile.....<BR>')//-->


Almeno salvo due cose che mi pare possano servire
tre
sigh
function aggiungi(q){
if(q=='innerHTML'||q=='innerText')
	{if(confirm('richiesta pericolosa, il browser potrebbe
piantarsi'))
 		{(isNaN(q))?
document.forms['ricerca'].oggetto.value+='.'+q:
document.forms['ricerca'].oggetto.value+='['+q+']'; esame();}
		else {return true}}
else {(isNaN(q))? document.forms['ricerca'].oggetto.value+='.'+q:



Perfetto; anche in qualche altro caso dava errore.
[]
Per la terza io proporrei una soluzione diversa, piu' drastica:
rendere non cliccabili i riferimenti e spostare in ogni caso il
controllo in esame(), in modo che funzioni anche se l'attributo viene
forzato nel campo testo:
---------------
 aPericolo= new Array ('innerHTML','innerText','outerText','outerHTML');
 for (i=0;i<aPericolo.length;i++) {
  if (document.forms['ricerca'].oggetto.value.indexOf(aPericolo[i])>=0){
   if(!confirm('richiesta pericolosa, il browser potrebbe piantarsi'))
return true;
  }
 }
............
 for (i=0; i<aObj.length; i++){
  if (aObj[i][0].indexOf('HTML')<0 && aObj[i][0].indexOf('innerText')<0
&& aObj[i][0].indexOf('outerText')<0){
   rep +='<tr><td class=cliccabile><a href=# onclick="nome(this);return
false">'+aObj[i][0]+ '</a></td>'
   rep+= '<td class=oggetto>' + aObj[i][1] + '</td></tr>';
  } else {
   rep +='<tr><td class=oggetto><a >'+aObj[i][0]+ '</a></td>'
   rep+= '<td class=oggetto>non visualizzato e non
cliccabile</td></tr>';
  }
 }
--------------
Cosa ne pensate?
Rivolto anche il promotore Daniele a cui stiamo manipolando l'idea.
Saluti, Paolo

Perfetto; anche in qualche altro caso dava errore.
oh la' mi sento meglio ;-)

giusto pero' integrerei il testo con qualcosa del tipo
'qui non visualizzato e non cliccabile  ma oggetto esistente ed
accessibile via script' ed eventualmente nell'alert anche consigliare
l' opzione prudente 
segnalo anche  che 
il mio IE5, che ormai sospetto di essere un tantino fuori di testa, 
va in crash totale con relativo successivo consiglio windows98SE di
riavvio computer anche cliccando su 'event'.
Il che sarebbe un bel limite.
A te/voi? ( raccomando a tutti di non provare con file di lavoro
aperti )
In quello bello spazio sulla destra nelle tue intenzioni si potrebbe
visualizzare via via delle informazioni relative agli
oggetti/metodi/eventi proprieta' cliccate?
altro punto, che ne diresti di visualizzare magari il nodeName, se
esistente ovviamente, sotto il form e sopra il div 'piccolo'?
tanto per fornire con immediatezza il punto del DOM in cui ci si
trova?
gia' che ci siamo,  si potrebbe cogliere al volo la disponibilita' di
Daniele allo sviuppo corale e di Riccardo Riccardi come gentile ospite
e trovare un posticino su Jsdir
per mantenere sempre l' ultima versione dello script?
Con te come referente e preposto all'upload in modo che chi vuole veda
sempre lo stato dello script e possa proporre qui (con gli opportuni
riferimenti per collocare nello script il suggerimento) le proprie
idee?
Ciao, trovo questo thread estremamente interessante e istruttivo.
sono particolarmente grato a Daniele per averlo suscitato e a te per
fornire a tutti uno strumento che mi sembra sempre piu' importante e
di grande potenzialita'.

On Mon, 08 Jan 2001 20:48:30 GMT, 
p.ca...@toglimitiscalinet.it
 wrote:
ho fatto alcune prove e ho scoperto che al mio IE5 a non piacere e'
document.domain
cliccando su document la variabile rep viene costruita correttamente
fino alla cella contenente documentElement e l' 'i' valorizzato al
momento dell' errore e' appunto 'domain'
mah?


Saluti, Paolo
-----------------








td.oggetto{ font-size: 12px; color: #ffffff}
#contenitore {
 position: relative;
 width: 280px;
 height: 320px;
}
-->
</style>
<script language="javascript" type="text/javascript">
<!--
function aggiungi(q){
 (isNaN(q))?
 document.forms['ricerca'].oggetto.value+='.'+q:
 document.forms['ricerca'].oggetto.value+='['+q+']';
 esame();
}
function ritorna (){
 pluto=document.forms['ricerca'].oggetto.value;
pos=(pluto.lastIndexOf('[')>pluto.lastIndexOf('.'))?pluto.lastIndexOf('[
'):pluto.lastIndexOf('.')
 if (pos>0) document.forms['ricerca'].oggetto.value=pluto.substr(0,pos);
 esame()
}
function esame(){
 aPericolo= new Array
('*innerHTML*','*innerText*','*outerText*','*outerHTML*','*aObj*','*esam
e*');
 ll=document.forms['ricerca'].oggetto.value;
 if
aPericolo.toString().indexOf('*'+ll.substr(ll.lastIndexOf('.')+1)+'*')>=
0)
  if(!confirm('richiesta pericolosa, il browser potrebbe piantarsi')){
   ritorna();
  }
 var obj = eval(document.forms['ricerca'].oggetto.value);
 var objText = document.forms['ricerca'].oggetto.value;
// con sort per ordinare la visualizzazione anche con NS
 aObj= new Array;
 c=0;
 for(i in obj){
  if(i=='ZoffsetX' || i=='ZoffsetY') {
   aObj[c]= new Array(i,''+'valore che ritorna errore non
visualizzato');
  } else  aObj[c]= new Array(i,''+obj[i]);
  c++
 }
 contrNS6='no'
 if (window.navigator.userAgent.indexOf('Netscape6')>=0){
  aChiavi= new Array('childNodes','attributes','mimeTypes')
  test=document.forms['ricerca'].oggetto.value;
  if
(aChiavi.toString().indexOf(objText.substr(objText.lastIndexOf('.')+1))>
=0) contrNS6='OK'
  if (contrNS6=='OK'){
   for(i=0; i<obj.length;i++){
    aObj[c]= new Array(''+i,''+obj[i].nodeName);
    c++
   }
  }
 }
 if (document.layers ||
window.navigator.userAgent.indexOf('Netscape')>=0 &&
contrNS6!='OK')aObj.sort();
 var rep ='nodeName: '+obj.nodeName+'<table border=0 width=280>'
 rep +='<tr><td class=oggetto >Attributo</td><td class=oggetto
width=100>Valore</td></tr>'
 for (i=0; i<aObj.length; i++){
  if ( (aPericolo.toString()).indexOf('*'+aObj[i][0]+'*')<0){
   rep +='<tr><td class=cliccabile><a href=# onClick="nome(this);return
false">'+aObj[i][0]+ '</a></td>'
   rep+= '<td class=oggetto >' + aObj[i][1] + '</td></tr>';
  } else {
   rep +='<tr><td class=oggetto><a >'+aObj[i][0]+ '</a></td>'
   rep+= '<td class=oggetto>qui non visualizzato e non cliccabile  ma
oggetto esistente ed accessibile via script</td></tr>';
  }
 }
 rep+='</table>'+'<br>------- fine --------';
if(document.getElementById){document.getElementById('piccolo').innerHTML
=''};
 if (document.layers) {
document.layers['contenitore'].document.layers['piccolo'].document.fgCol
or='#ffffff';
document.layers['contenitore'].document.layers['piccolo'].document.open(
);
document.layers['contenitore'].document.layers['piccolo'].document.write
(rep);
document.layers['contenitore'].document.layers['piccolo'].document.close
();
  document.layers['contenitore'].document.layers['piccolo'].moveTo(0,0)
 } else  document.getElementById('piccolo').innerHTML = rep;
}
function seleziona(){
  var tArea = document.forms['report'].risposta;
  with(tArea){
   select();
   focus();
  }
}
// -->
</script>
<script language="javascript" type="text/javascript">
function nome(obj){
/* self.onerror=function(){
  alert('errore');
  self.location.reload();
  return true;
 }*/
// alert(obj.text)
 q= (document.layers)? obj.text: obj.firstChild.data
 aggiungi(q)
}
</script>
<script language="javascript" type="text/javascript">
<!--
function scrolla(d){
 dir=d;
 qt=(dir=='su')?-10:10;
 scrolla1(dir);
}
function scrolla1(){
 objL=document.layers['contenitore'].document.layers['piccolo'];
 if (dir!='su' && objL.top>=0 || dir=='su'
&& -objL.top>=(objL.clip.height-320)) pippo='pluto';
 else objL.moveBy(0,qt)
 zz=setTimeout('scrolla1()',150);
}
// -->
</script>
<head>
<body bgcolor="#223355" vlink=#ff0000 topmargin="15" marginwidth="15"
marginheight="15" link=#ff0000 >
<h1>inserisci l'oggetto da ricercare</h1>
<form name="ricerca" onSubmit="esame();return false">
  <input type="text" name="oggetto" size="30"
id="testo"value=window><br>
  <input type="button" name="ok" value="cerca" onClick="esame()">

</form>


file://-->
</SCRIPT>
</layer>
</ilayer>
<nolayer>
<DIV id="piccolo" STYLE="width: 280px; height: 320px; overflow:
scroll;">cliccate su questa o opener <BR>
i termini in rosso che appariranno qui sono cliccabili, non sempre in
modo
utile...
</div>
</nolayer>
</body>
</html>
<SCRIPT LANGUAGE=javascript>
<!--
file://alert(window.event)
file://-->
</SCRIPT>
-----------------

Saluti, Paolo
Anch'io  ;-)

 Daniele, se gridiamo tutti insieme ti strappaimo al tuo silenzio?
Scusaaaaaatemi !!!
Sono stato a Milano per alcuni giorni e solo questa sera ho letto i
post.
ore 02:05:51 ... :°(
Letto ... diciamo che gli ho dato solo una breve scorsa poichè sono
letture che meritano tempo e attenzione.
Sto finendo un lavoro con l'acqua tremendamente alla gola e quindi per
qualche altro giorno sarò solo lettore silenzioso.
Non sia mai che attendiate un mio "via libera" poichè ne sapete
certamente più di me e quindi al massimo sono onorato di vedermi
riconosciuta una qual sorta di "paternità" morale alla cosa.
Quindi grazie per tutto quello che avete fino ad ora fatto e non vedo
l'ora di gustarlo appieno per poter dire [casomai ...] la mia .
Al limite, se ci saranno gli estremi, mi piacerebbe lavorare ad una resa
grafica estremamente chiara e "stampabile" di quanto elaborato dagli
algoritmi che avete implementato.
Se trovassi anche il modo di generare una bitmap o ancor meglio un pdf,
andrei in gloria :)))
Per ora è tutto.
Onoratissimo, Daniele

 )
Non ho nessun collegamento con JsDir  e l'inserimento dei propri script
e' assolutamente libero; la sezione UsersScript non prevede particolari
procedure.
Direi che vista la disponibilita' di Daniele e il tuo interesse a fare
di questo codice una "bibbia" dovresti essere tu il gestore/manutentore.
Saluti, Paolo

Onoratissimo, Daniele
Saluti, Paolo 

Saluti, Paolo
ri-anch'io-
--------------------------------------------------------------------
E'  venuto fuori in modo un po' impertinente,
ma c'è stato un gran gusto nel farlo
-------------------------------------------------------------------
Re Lear (credo) come citato da Primo Levi ne 'La chiave a Stella'
[citazione a memoria]

 Chissa' che Riccardo non stia leggendo e abbia un parere?
[]
Direi che gli script di UsersScript dovrebbero essere completi e
utilizzabili off-line.
Si possono, comunque, aggiungere e/o modificare  file successivamente.
Credo, in ogni caso, si possa gia' pubblicare questa versione e, poi,
pensare a come eventualmente implementare le descrizioni (dabase js,
html esterni ....).
Incollo l'ultima versione del codice completo per una ulteriore
revisione.
Saluti, Paolo
------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>esamina un oggetto JavaScript o meglio conosci il tuo browser e
la tua pagina</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
  textarea {
   font-family: "Courier New", Courier, mono;
   font-size: 14px;
   color: #FFFFFF;
   background-color: #006699
}
A:link {
 font-size: 12px;
 color: red;
 text-decoration: none
}
  body {
   font-family: Arial, Helvetica, sans-serif;
   font-size: 12px;
   color: #FFFFFF
}
  h1 {
   font-size: 16px;
   font-weight: bold
}
 .titolo {
   font-size: 16px;
   font-weight: bold;
   color: #ffffff;
}











 for(i in obj){
   aObj[c]= new Array(i,''+obj[i]);
  c++
 }
 contrNS6='no'
 if (window.navigator.userAgent.indexOf('Netscape6')>=0){
  aChiavi= new Array('childNodes','attributes','mimeTypes')
  test=document.forms['ricerca'].oggetto.value;
  if
(aChiavi.toString().indexOf(objText.substr(objText.lastIndexOf('.')+1))>
=0) contrNS6='OK'
  if (contrNS6=='OK'){
   for(i=0; i<obj.length;i++){
    aObj[c]= new Array(''+i,''+obj[i].nodeName);
    c++
   }
  }
 }
 if (document.layers ||
window.navigator.userAgent.indexOf('Netscape')>=0 &&
contrNS6!='OK')aObj.sort();
 var rep ='<table border=0 width="280">' // width=100%>'
 rep +='<tr><td class=oggetto >Attributo</td><td class=oggetto
width=100>Valore</td></tr>'
 for (i=0; i<aObj.length; i++){
  if ( (aPericolo.toString()).indexOf('*'+aObj[i][0]+'*')<0){
   rep +='<tr><td class=cliccabile><a href=# onClick="nome(this);return
false">'+aObj[i][0]+ '</a></td>'
   rep+= '<td class=oggetto >' + aObj[i][1] + '</td></tr>';
  } else {
   rep +='<tr><td class=oggetto><a >'+aObj[i][0]+ '</a></td>'
   rep+= '<td class=oggetto>qui non visualizzato e non cliccabile  ma
oggetto esistente ed accessibile via script</td></tr>';
  }
 }
 rep+='</table>'+'<br>------- fine --------';
file://alert(rep)
 if(document.getElementById){
  document.getElementById('piccolo').innerHTML='';
//
document.getElementById('nomedelnode').innerHTML=(obj.nodeName==null)?''
: 'nodeName: '+obj.nodeName;
  };
 if (document.layers) {
  document.layers['contenitore'].clip.width=window.innerWidth-30;
document.layers['contenitore'].document.layers['piccolo'].document.fgCol
or='#ffffff';
document.layers['contenitore'].document.layers['piccolo'].document.open(
);
document.layers['contenitore'].document.layers['piccolo'].document.write
(rep);
document.layers['contenitore'].document.layers['piccolo'].document.close
();
  document.layers['contenitore'].document.layers['piccolo'].moveTo(0,0);
document.layers['contenitore'].document.layers['piccolo'].clip.width=win
dow.innerWidth-30;
 } else  document.getElementById('piccolo').innerHTML = rep;
}
function seleziona(){
  var tArea = document.forms['report'].risposta;
  with(tArea){
   select();
   focus();
  }
}
// -->
</script>
<script language="javascript" type="text/javascript">
function nome(obj){
/* self.onerror=function(){
  alert('errore');
  self.location.reload();
  return true;
 }*/
// alert(obj.text)
 q= (document.layers)? obj.text: obj.firstChild.data
 aggiungi(q)
}
</script>
<script language="javascript" type="text/javascript">
<!--
function scrolla(d){
 dir=d;
 qt=(dir=='su')?-10:10;
 scrolla1(dir);
}
function scrolla1(){
 objL=document.layers['contenitore'].document.layers['piccolo'];
 if (dir!='su' && objL.top>=0 || dir=='su'
&& -objL.top>=(objL.clip.height-320)) pippo='pluto';
 else objL.moveBy(0,qt)
 zz=setTimeout('scrolla1()',150);
}
// -->
</script>
<head>
<body bgcolor="#223355" link=#ff0000 vlink=#ff0000 leftmargin="15"
topmargin="0" marginwidth="15" marginheight="0"  >
<TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0 >
 <TR><td class="titolo">inserisci l'oggetto da ricercare</td></tr>
 <TR><form name="ricerca" onSubmit="esame();return false" >
<TD><input type="text" name="oggetto" size="30"
id="testo"value=window><br>
  <input type="button" name="ok" value="cerca" onClick="esame()">
  <input type="button" name="ok" value="opener"
onClick="this.form.oggetto.value='opener';esame()">
  <input type="button" name="rit" value="prec." onClick=ritorna()>
</TD>
</form>
 </TR><TR><TD id="nomedelnode" class='oggetto'></TD>&nbsp;</TR>
</TABLE>
<hr width="100%" size="1" id="divisione" noshade align="left" >
<SCRIPT LANGUAGE=javascript>
<!--
if (document.layers) {
document.write('<a href=# onMouseOver="scrolla(\'su\')"
onMouseOut="clearTimeout(zz)" >Su</a>');
document.write('&nbsp;&nbsp;<a href=# onMouseOver="scrolla(\'giu\')"
onMouseOut="clearTimeout(zz)" >Giu</a>');
document.write('&nbsp;&nbsp;&nbsp;&nbsp;<a href=#
onClick="aggiungi(\'layers\');return false" >Aggiungi layers</a>');
document.write('&nbsp;&nbsp;&nbsp;&nbsp;<a href=#
onClick="aggiungi(\'document\');return false" >Aggiungi document</a>');
document.write('<hr width="100%" size="1" id="divisione" noshade
align="left">');
}
// -->
</SCRIPT>
<ilayer name="contenitore" height=320>
<layer name="piccolo" STYLE="position: absolute; ">
<SCRIPT LANGUAGE=javascript>
<!--
if (document.layers)document.write('i termini in rosso che appariranno
qui sono cliccabili, non sempre in modo utile.....<BR>')
file://-->
</SCRIPT>
</layer>
</ilayer>
<nolayer>
<DIV id="piccolo" STYLE=" width:280; height: 320px; overflow:
