Newsgroup: it.comp.lang.javascript
Titolo: modificare il layout a seonda della pagina con js

Salve a tutti,
non riesco a procedere con questa cosa:
vorrei che se il browser rileva che mi trovo sulla pagina X,
allora mi faccia comparire un DIV, altrimenti lo tenga nascosto.
Io ho fatto cosï¿œ:
<script>
             function changeDis()
             {
             var strURL;
             strURL = document.location.href;
             var e = document.getElementById("div_nascosto");
             if 			 
(strURL.indexOf("
http://www.miosito.it/pagina.aspx?idcat=4
"))
             {
              e.style.display = 'block';
             }
             else
                         {
              e.style.display = 'none';
             }
             return true;
             }
</script>
poi non so piu come andare avanti, perchï¿œ non so come chiamare la funzione.
Non posso mettere pulsanti che facciano questa cosa.
Ne posso usare l'onload nel tag body.
Inoltre secondo voi, quello che ho scritto ï¿œ corretto?
Grazie mille a chiunque mi sappia consigliare una soluzione.
Franz

 Inoltre secondo voi, quello che ho scritto è corretto? [...]
A me piace. Non serve altro, se lo metti in fondo al </body> (altezza 
della caviglia, dove di solito si danno i morsi).
Oppure usi i soliti window.addEventListener("load",changeDis,true) 
window.onload e compagnia ululante, ma devi preoccuparti della 
compatibilità o usare librerie come JQuery.
Bau.

 usare l'onload nel tag body.
window.onload?
 
https://developer.mozilla.org/en/DOM/window.onload

  
https://developer.mozilla.org/en/DOM/window.onload
Ringrazio entrambi, ma nonostante la funzione la chiami con 
window.onload, non riesco a far cambiare la proprietà di display
del div con id "div_nascosto" da block a none.
Non capisco dov'è l'errore.
Questo è il codice:
<script>
window.onload = function changeDis()
             {
             var strURL;
             strURL = window.location.href;
             var e = document.getElementById("zoom");
             if (strURL.indexOf("pagina.aspx?idcat=4"))
             {
              e.style.display = 'block';
             }
             else
                         {
              e.style.display = 'none';
             }
             return true;
             }
</script>
il div è il seguente:
<div style="width:100%;display:none;" id="zoom">
  <asp:HyperLink ID="linkImgArcataBig" runat="server" 
ImageUrl="~/immagini/arcate/arc_ole.gif" Target="_blank">
</asp:HyperLink>
</div>
dove sbaglio secondo voi?
Franz

 window.onload = function changeDis()
non si usa così ... vedi il link che ti ho postato. Guarda inoltre con 
firefox, nella sua console errori dovresti vedere qualcosa.

 firefox, nella sua console errori dovresti vedere qualcosa.
Ciao Cristiano,
non va purtroppo.
Questo è il codice:
<script type="text/javascript">
  window.onload = changeDis;
  function changeDis()
             {
             var strURL;
             strURL = document.location.href;
             var e = document.getElementById("zoom");
             if (strURL.indexOf("ArcateAcc.aspx?idcat=4") >= 0)
             {
             if (e.style.display == 'none')
             {alert('trovato');
              e.style.display = 'block';
              }
             }
             else
                         {
              e.style.display = 'none';
             }
             return true;
             }
</script>
E' un po' diverso rispetto alla prima versione, ma non ho aggiunto 
niente di complicato.
Ho aggiunto un alert per vedere se riconosce quantomeno il div, ma niente.
Sembra che non funzioni strURL.indexOf in pratica.
Eppure nella stessa pagina lo uso per un altro controllo e funziona.
Sto impazzendo e ho assoluta necessità di risolvere sta cosa.
:(
Consigli?
Grazie mille
Franz

              if (e.style.display == 'none')
[...]
Bau Bau Bau!
(trad: con e.style.display leggi solo le proprietà CSS assegnate da 
JavaScript, non quelle predefinite o assegnate dai fogli di stile)

 Consigli?
Se non è il problema del case-sensitive hai qualche altro problema nella 
pagina.
Ho praticamente copiaincollato il tuo esempio e funziona (firefox):
<html><head>
<script type="text/javascript">
  window.onload = changeDis;
  //per sicurezza window.onload lo dichiarerei dopo la function, ma con 
firefox vedo che funziona ugualmente, con IE non so
 //il file di test lo ho chiamato prova.htm
  function changeDis()
             {
             var strURL;
	     //window, non document
             strURL = window.location.href;
             var e = document.getElementById("zoom"); 
	     //confronto in maiuscolo per evitare problemi case-sensitive
	     if (strURL.toUpperCase().indexOf("PROVA.HTM") >= 0) {
             if (e.style.display == 'none')
             {
		alert('trovato');
                e.style.display = 'block';
              }
             }
             else
                         {
              e.style.display = 'none';
             }
             return true;
             }
</script>
</head>
<body>
<div style="width:100%;display:none;" id="zoom">
div!
</div></body>
</html>

 pagina.
si, ho un altro problema.
Si tratta della funzione load() delle mappe di google che
viene caricata nel tag body con l'onload.
In particolare, lo script di gmaps si trova nella masterpage
asp.net
, mentre lo script che ho postato qui sta in una pagina
"figlia".
Non so piu che pesci prendere a questo punto, visto che non
posso mettere nell'onload del body una funzione che viene chiamata
solo dalla pagina "figlia" in questione.
Aiutino?
Grazie mille
Franz

 mentre lo script che ho postato qui sta in una pagina "figlia".
uhm ... varie soluzioni, così come mi vengono in mente:
 a) nella masterpage, al termine dell'onload, metti un qualcosa del tipo:
 if (typeof body_onload=='function') body_onload();
e nella pagina figlia rinomini semplicemente la function come  
"body_onload" (e potrai usarlo per tutte le pagine)
 b) usi jquery, che "accoda" gli onload
 c) metti nella masterpage come sopra, ma riferito alla tua function (ma 
così varrà solo per questa pagina)
 d) ...

  d) ...
Una soluzione più complessa ma più generica, che uso io in vs2008:
 - ho creato una classe che, semplicemente, riceve "stringhe"; man mano 
che mi serve qualcosa da eseguire window.onload lo "dico" a questa classe
 - durante il rendering chiamo una function di questa classe che si 
occupa di creare window.onload (io lo metto normalmente onrender del piè 
di pagina), del tipo
 window.onload=function() {
   //qua tutte le stringhe fornite
 }
in questo modo eseguirai tutto ciò che vuoi window.onload

 "body_onload" (e potrai usarlo per tutte le pagine)
Che dire...ubi major...
Bravissimo, hai capito il problema e ho risolto con la tua soluzione a)
Grazie infinite.
Davvero.
Franz