• User

    Motore di Ricerca interno - Problemi con document.write

    Ciao!
    vorrei realizzare una piccola ricerca in JS su un sito di poche pagine, realizzato tutto in HTML ed ho trovato online un javasript abbastanza facile da configurare.

    lo posto qui:```

    <script language="JavaScript" type="text/javascript"> var item = new Array(); // "Nome pagina","percorso","Titolo pagina","parole,chiave,Key,Words","Descrizione e Commenti" c=0; item=new Array("index.html","","Web-Link","index,main,start,home","Dimostrazione motore di ricerca interno al tuo sito."); c++; item=new Array("index.html","","primi passi","iniziare,principianti,come,fare","Corso html per principianti."); c++; item=new Array("index.html","","Guida html","html,links,pagina,web","Guida html."); c++; item=new Array("scripting.htm","main/","Scripting","script,scripting,javascript,dhtml","Scripting per tutti."); c++; item=new Array("lewebcen.gif","main/images/","Link Logo","link,image,logo,graphic,immagine","Il logo del mio sito in formato gif. Potete fare un link adoperando questo."); page="<html><head><title>Script su scripting di WebLinkSearch Results</title></head><body bgcolor='white'><center><table border=0 cellspacing=10 width=80%>"; function search(frm) { win = window.open("","","scrollbars"); win.document.write(page); txt = frm.srchval.value.split(" "); fnd = new Array(); total=0; for (i = 0; i < item.length; i++) { fnd* = 0; order = new Array(0, 4, 2, 3); for (j = 0; j < order.length; j++) for (k = 0; k < txt.length; k++) if (item*[order[j]].toLowerCase().indexOf(txt[k]) > -1 && txt[k] != "") fnd* += (j+1); } for (i = 0; i < fnd.length; i++) { n = 0; w = -1; for (j = 0;j < fnd.length; j++) if (fnd[j] > n) { n = fnd[j]; w = j; }; if (w > -1) total += show(w, win, n); fnd[w] = 0; } win.document.write("</table><br>Parole trovate: "+total+"<br></center></body></html>"); win.document.close(); } function show(which,wind,num) { link = item[which][1] + item[which][0]; line = "<tr><td><a href='"+link+"'>"+item[which][2]+"</a> Punti: "+num+"<br>"; line += item[which][4] + "<br>"+link+"</td></tr>"; wind.document.write(line); return 1; } </script>

    
    nella pagina/e da cui si deve eseguire la ricerca invece
    
    va il form: 
    
    

    <form method=get action="java-script:void(0)" onsubmit="search(this); return false;"> <input type=text name=srchval value=""><input type=submit value="Cerca"> </form>

    
    Tutto sommato è facile da sistemare anche per me che  ci capisco ben poco, e devo dire che funziona pure abbastanza  bene....tranne che su IE. (ovvio no?! :p)
    
    Cercando online ho trovato parecchie problematiche relative al **document.write**, che sembrerebbe essere la causa di tutto, perchè genera un errore di **autorizzazione negata** solo con il beneamato browser di casa MS, bloccando ovviamente tutta la pagina e impedendo la visualizzazione dei risultati.
    
    Se omettiamo con un commento la riga **win.document.write(page);**  allora tutto va apposto e i risultati vengono mostrati, ma purtroppo  poi non è piu possibile formattare la pagina dandole un aspetto  decoroso, perche nella variabile "page" in realtà si va a mettere tutto  l'html che andrà a impaginare le cose nel modo giusto, (praticamente  come le altre pagine del sito), in modo da non far notare la differenza  agli utenti e laciando cmq i menu, e tutto il resto.
    
    Chiedo a voi allora, se è possibile da questo script fare in modo che il  document.write lavori anche con IE, oppure se esiste un modo  alternativo per "scrivere" la pagina dei risultati.!
    
    PS: non ho preso in considerazione linguaggi lato server perche sono a secco di nozioni XD
    
    Thx in advance  :D

  • User

    Allora, cercando sempre online, forse posso usare l'innerHTML che sembra essere accettato da explorer, ma sono davvero alle prime armi!
    Nel frattempo che mi ci metto, qualcuno saprebbe darmi una mano?

    thx!


  • User

    Ciao! tra una guida e l'altra sto andando per tentativi...

    ho provato a sostituire nella funzione search

    win.document.write(page); con document.getElementsByTagName("html").innerHTML= page;

    Effettivamente ora non si impalla piu, e i risultati vengono mostrati, ma non vede cmq la formattazione con i css con nessuno dei browser (Firefox Chrome Opera etc..) che invece prima la mostravano (tranne ie).

    Qualcuno sarebbe così paziente da provare a darmi una mano?
    Grazie