Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Problemi con Safari

  1. #1
    Utente di HTML.it L'avatar di scar81
    Registrato dal
    Feb 2002
    Messaggi
    206

    Problemi con Safari

    Sto realizzando un sito che ha un menu (e relativi sottomenu) semitrasparente fatto con dei div, che vengono resi visibile o nascosti con una funzione javascript. Il cliente ha Safari e non riesce a vedere i menu.
    Non so se è un problema di css (ad esempio il position absolute o il display none/block) o se è un problema della funzione javascript che cerca la variabile document.all[i].id

    Ho provato a installare Swift su Windows ma si crasha appena entro. Qualcuno piò segnalarmi un emulatore di safari per windows oppure vedere cosa c'è che non va nel codice?




    Riporto lo stylesheet del div
    .menu_shop {
    position: absolute;
    top: 180px;
    width: 150px;
    background-color: White;
    filter: alpha(opacity=80);
    -moz-opacity: 0.8;
    opacity: 0.8;
    display: none;
    text-align: left;
    color: #000000;
    border: 1px solid #00CC00;
    font-size: 11px;
    font-weight: bold;
    margin: 0px;
    }
    e il codice javascript
    function mostra(div){
    var numerocampi=document.all.length, numerodiv=div.substr(div.indexOf("_")-1,1);
    for(i=0;i<=numerocampi;i++) {
    if(typeof document.all[i]!='undefined' && document.all[i].id.indexOf("menu")!=-1) {
    numero=document.all[i].id.substr(document.all[i].id.indexOf("_")-1,1);
    if(numero+1>=numerodiv && document.all[i].id!=div) document.all[i].style.display="none";
    }
    }
    if(document.getElementById(div)!==null) {
    if(document.getElementById(div).style.display=="bl ock") document.getElementById(div).style.display="none";
    else document.getElementById(div).style.display="block" ;
    }
    }
    Domini gratuiti
    Vendita online prodotti GNLD e AGEL

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Premessa; l'opacita` non fa parte dello standard attuale, pero` alcuni browser la implementano mediante attributi proprietari.

    Che io sappia Safari non riconsoce l'opacita`: e` come se fosse sempre opacity:1

    pero` qualche giorno fa qualcuno in queste pagine faceva notare che l'ultima versione ha qualcosa in tal senso.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it L'avatar di scar81
    Registrato dal
    Feb 2002
    Messaggi
    206
    Vabè ma se Safari non lo supporta dovrebbe farmelo vedere come opacità 1 giusto? In questo caso invece non mi fa proprio veder niente.

    Ho pensato che il problema fosse document.all (che Safari non dovrebbe supportare), ma comunque dovrebbe farmi vedere almeno i menu perchè quelli li rendo visibili con document.getElementById. Invece niente.
    Domini gratuiti
    Vendita online prodotti GNLD e AGEL

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non avevo controllato il JS, ma mipare che nonpossa funzionare in browser diversi da IE.

    Infatti la prima cosa che fa e` determinare numerocampi, che puo` venir determinato solo in IE (non c'e` alternativa), indi il loop verra` eseguito una volta sola (da 0 a 0), e all'interno del loop ci sono una serie di if che non sono validi in browser diversi da IE.

    In pratica devi rivedere il JS e renderlo cross-browser.
    per questo sposto la discussione nel forum JS

    Ma dovrai specificare la compatibilita` che vuoi:
    se ti basta da IE5.5 in poi, conviene riscrivere il JS in forma moderna, se invece ti servono compatibilita` piu` vecchie (IE5.0, IE5.2, NN4, ...) allora occorre scrivere il JS tenendo conto anche dei brwoser vecchi.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it L'avatar di scar81
    Registrato dal
    Feb 2002
    Messaggi
    206
    Grazie ma non credo che sia un problema di javascript, dato che la seconda parte, quella con document.getElementById, dovrebbe comunque funzionare e far aprire il menu. La prima parte serve solo per nascondere gli altri.

    Comunque già che sono dietro, come posso risolverlo? Quali sono le alternative di:
    numerocampi=document.all.lenght
    e
    [I]for(i=0;i<=numerocampi;i++) document.all.id;
    Domini gratuiti
    Vendita online prodotti GNLD e AGEL

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Intanto provo a rispondere io, ma spero che proseguano i guru di JS. Io sono un po' arrugginito, specie con le cose nuove.

    Comunque non so se e` valido
    if(document.getElementById(div)!==null)
    che significa !== ? Lo ho visto in altri linguaggi, non in JS.


    E cosa e` la variabile div?
    A parte che il nome div e` gia` usato dal DOM e potrebbe non venir trattato correttamente, deve essere una stringa uguale all'id di un elemento della pagina.
    Nel blocco precedente usi div come se fosse un oggetto del DOM, non come stringa.
    In IE puoi usare un oggetto al posto della stringa che lo rappresenta o viceversa, in altri browser questo non funzionia.

    document.all
    La cosa che piu` gli assomiglia e` document.getElementById('ID_OGGETTO'), ma la sintassi e` chiaramente diversa.

    numerocampi potrebbe essere dato da:
    document.getElementById('ID_FORM').elements.length ;
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it L'avatar di scar81
    Registrato dal
    Feb 2002
    Messaggi
    206
    Sono riuscito a ricereare lo stesso effetto senza usare il document.all, ora aspetto di fare i test su safari.
    Comunque quel div è il nome del div che contiene il menu da visualizzare.

    Se a qualcuno dovesse servire ho fatto così:

    function mostra(menu){
    var c = document.getElementsByTagName("body")[0].getElementsByTagName("div");
    var numerocampi=c.length, numeromenu=menu.substr(menu.indexOf("_")-1,1);

    for(i=0;i<=numerocampi;i++) {
    if(typeof c[i]!='undefined') {
    cid=c[i].id.toString();
    if(cid!="" && typeof document.getElementById(cid)!='undefined' && cid.indexOf("menu")!=-1) {
    numero=cid.substr(cid.indexOf("_")-1,1);
    if(numero+1>=numeromenu && cid!=menu) document.getElementById(cid).style.display="none";
    }
    }
    }
    if(document.getElementById(menu)!==null) {
    if(document.getElementById(menu).style.display=="b lock") document.getElementById(menu).style.display="none" ;
    else document.getElementById(menu).style.display="block ";
    }
    }
    Domini gratuiti
    Vendita online prodotti GNLD e AGEL

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    E` un po' piu` complesso del necessario. ...
    E poi hai una strana idea sui "campi".
    Per me un campo e` un elemento di un form, per te sono i div.

    Provo a rielaborare quello script:
    codice:
    function mostra(menu){
      var c = getElementsByTagName("div");
      var numeromenu=menu.substr(menu.indexOf("_")-1,1);
    
      for(var i=0; i<=c.length; i++) {
        if(typeof c[i]!='undefined') {
          var cid=c[i].id.toString();
          if(cid!="" && typeof(document.getElementById(cid))!='undefined' && cid.indexOf("menu")!=-1) {
            var numero=cid.substr(cid.indexOf("_")-1,1);
            if(numero > numeromenu && cid != menu) 
              document.getElementById(cid).style.display="none";
          }
        }
      }
    
      if((mm = document.getElementById(menu) )) {
        mm.style.display = mm.style.display=="block" ? 'none' : 'block;
      }
    }
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.