Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [XSL + JAVASCRIPT] Esecuzione javascript in html generato tramite xslt

    Salve a tutti.
    Premetto che non so se è più corretto inserire questo post in "XMS XSL, Smil" o in "JavaScript".

    Veniemo al dunque: da un file xml genero tramite un file xslt una pagina html facendo fare la trasformazione direttamente a firefox.
    All'interno della pagina html generata devo inserire un javascript al quale viene passata una stringa che rapprensenta una data, calcola la differenza tra due date, e scrive sulla pagina io risultato.

    Il javascript che contiene la funzione che si occupare delle operazioni sulla stringa si trova sul file "time.js" il quale viene incluso nella pagina html tramite il seguente codice contenuto nel file xslt:

    codice:
     
    <head>
          <title>Annotazioni</title>
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
          
          <script type="text/javascript" src="time.js"></script>  
    </head>
    la funzione "time.js" viene successivamente "richiamata" nel seguente modo (questa porzione di codice è contenuta all'interno dell'xslt di trasformazione):

    codice:
    <script> time("CIAO"); </script>
    Il problema è che quando viene caricato all'inetrno di firefox il file xml al quale è associato il file xslt di trasformazione mi ritrovo con una pagina bianca dovè c'è scritto solo "CIAO", mentre se elimino la chiamata alla funzione time() tutto funziona normalmente.

    Per il momento la funzione time, che riporto di seguito, si occupata solamente di ripetere in uscita la strringa passatale come ingresso.

    codice:
    function time(text)
    {
      var before="Year 3000!"
      var current="Today is Year 3000!"
      var montharray=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
      
        theyear=2000;
        themonth=1;
        theday=1;
        thehour=18;
        theminute=24;
        thesecond=30; 
        var today=new Date()
        var todayy=today.getYear()
        if (todayy < 1000)
        todayy+=1900
        var todaym=today.getMonth()
        var todayd=today.getDate()
        var todayh=today.getHours()
        var todaymin=today.getMinutes()
        var todaysec=today.getSeconds()
        var todaystring=montharray[todaym]+" "+todayd+", "+todayy+" "+todayh+":"+todaymin+":"+todaysec
        futurestring=montharray[themonth-1]+" "+theday+", "+theyear+" "+thehour+":"+theminute+":"+thesecond
        
        dd=Date.parse(futurestring)-Date.parse(todaystring)
        dday=Math.floor(dd/(60*60*1000*24)*1)
        dhour=Math.floor((dd%(60*60*1000*24))/(60*60*1000)*1)
        dmin=Math.floor(((dd%(60*60*1000*24))%(60*60*1000))/(60*1000)*1)
        dsec=Math.floor((((dd%(60*60*1000*24))%(60*60*1000))%(60*1000))/1000*1)
        
        document.write(text);  
     }
    Grazie per ul Vostro aiuto!!!

  2. #2
    Utente di HTML.it L'avatar di Polley
    Registrato dal
    Jan 2005
    Messaggi
    696
    credo che il problema sia di javascript non di xsl, chiedi di spostare la discussione o aspettiamo chi ne sà di più


  3. #3
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    non ho capito bene la situazione ma prova cambiando

    document.write(text);

    in

    document.open();
    document.write(text);
    document.close();
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  4. #4
    thread spostato in JavaScript.

    ciao

  5. #5
    Ciao fcaldera.
    Ho provato come hai suggerito, ma purtroppo non è cambiato nulla.

    Ho fatto una prova sostituendo a document.write() un alert(): in pratica ho notato che prima firefox esegue l'alert() e poi visualizza regolarmente la pagina.

  6. #6
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    ah ecco... stai facendo un document.write dentro l'head della pagina

    fermo restando il mio suggerimento di prima, prova anche a spostare lo script dentro il body
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  7. #7
    Ho spostato lo script dentro il body e questa volte glielo ho pure scritto tutto, ovviamente eliminando il riferimento per la sua inclusione nell'HEAD; riporto una porzione dell'xsl per maggiore chiarezza:

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    ............
    xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
    >
    
    <xsl:output method="html"/>
    
      <xsl:template match='r:RDF'>
          
        <html>
        
        <head>
          <title>Annotazioni</title>
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
          <script type="text/javascript" src="tabber.js"></script>
          <link rel="stylesheet" href="example.css" type="text/css" media="screen"></link> 
        </head>
        
        <body>
         
        <script type="text/javascript">
          function time(text)
            {
              document.open();
              document.write(text);
              document.close();
            }
        </script>
         
          
          <h1>Annotazioni</h1>
        
        <div class="tabber">
        
        
        <div class="tabbertab">
        .............
        .............
                    <td width="100%" bgcolor="#e7e4ba">
                      Annotazione: 
                          
                          <script>
                          time("ciao");
                          </script>
                                        
                      
    </br>
                      <xsl:apply-templates select="_2:ipotesi"/>
                      
        .............
        .............
        </div>
        
        
        .............
        .............
          </div>
        </body>
      </html> 
    </xsl:template>
    ma il risultato è sempre lo stesso: un malinconico "ciao"......; la cosa che mi stranizza è perchè prima firefox esegue questo codice javascript e poi tralascia tutto il resto (nel caso di document.write, mentre se metto un alert, prima fa vedere l'alert e poi carica correttamente la pagina).

  8. #8
    Ho fatto questa semplice paginetta di prova per verificare se il problema fosse FireFox (cosa improbabile presumo) oppure nella trasformazione:

    codice:
    <html>
    
    <head>
    <meta http-equiv="Content-Language" content="it">
    <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Test</title>
    </head>
    
    <body>
    
    <script type="text/javascript">
      function time(text)
        {
          document.open();
          document.write(text);
          document.close();
        }
    </script>
    Test JavaScript:
    
    
    Pippo Pluto e Paperino
    
    
      
    <script type="text/javascript">
    time("ciao");
    </script>
      
    
    
    Qui Quo Qua
    </body>
    </html>
    Aprendo la pagina con FireFox il risultato è ovviamente:

    Test JavaScript:
    Pippo Pluto e Paperino
    ciao
    Qui Quo Qua
    Allora il problema sta nella trasformazine?? :master:

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.