Leggere un valore generato da un codice HTML/JavaScript

Da Gambas-it.org - Wikipedia.

Poiché attualmente non è possibile salvare un file di testo mediante il protocollo JavaScript [nota 1], al fine, dunque, di leggere da un programma Gambas un valore dal processamento del codice HTML, ci serviremo del metodo document.write() del protocollo JavaScript che scrive una stringa direttamente nella pagina web (ossia, nel nostro caso, nella WebView). Quanto scritto nella WebView sarà raccolto dalla sua proprietà .Text [nota 2], che mostra il testo scevro dal codice html. E', dunque, necessario attivare il componente gb.qt4.webkit o gb.qt5.webkit e porre o comunque creare sul Form una WebView.


Mostriamo per questo caso un esempio, nel quale il programma Gambas richiama un file html, contenente il codice JavaScript essenziale per generare una finestra Prompt (simile all'InputBox di Gambas), nella quale si inserisce manualmente un valore che sarà passato all'HTML. Il codice JavaScript, presente nel predetto file html, provvederà a modificare il valore ricevuto, e quindi a scrivere nell'oggetto WebView il valore modificato secondo il codice JavaScript. In ultimo, il codice Gambas mostrerà il risultato finale in una 'TextEdit.

Il codice html può essere, ad esempio, il seguente:

<HTML>


 <HEAD>

  <SCRIPT>

    var p = prompt('Inserisci il dato:');

// Modifichiamo il dato aggiungendovi semplicemente del testo:
    var b = p + ' qualsiasi testo';

// Scrive il dato nella WebView:
    document.write(b);

  </script>

 </head>


</html>

Non è necessario che l'oggetto WebView sia visibile, o sia comunque effettivamente presente sul Form, è sufficiente che sia inizializzato e che sia impostata la sua proprietà .Url con l'indirizzo del file html. Pertanto nel codice Gambas si potrà anche impostare l'oggetto WebView anche solo così:

Private wv As WebView


Public Sub Form_Open()

  With wv = New WebView(Me)
' Richiamiamo il file html:
    .Url = "percorso/del/file.html"
  End With

End


Public Sub Button1_Click()

' Nella "TextEdit" sarà mostrato il valore inserito nel prompt e successivamente modificato nel file html:
   TextEdit1.Text = wv.Text

End


Vediamo ora due casi in cui il programma Gambas si serve di una porzione di codice HTML e JavaScript per ricevere da questo una valore di tipo stringa. Nel codice HTML è presente una funzione, dalla quale si ottiene un valore. Il codice Gambas può raccogliere il valore ottenuto da quella funzione mediante questa modalità.

Esempio senza file esterno .js

Nel primo esempio non ci serviremo di un file esterno .js, ma la gestione del valore da passare si svolgerà tutta nel codice HTML. Quanto scritto nella WebView sarà mostrato in una TextEdit.

Il codice HTML, contenuto all'interno di un file HTML e posto nella cartella Dati del progetto, è il seguente:

<html>
  <head>
  </head>

   <script language="JavaScript">

//viene svolta la funzione:
   function calcolo(){
     var a
     a = 7 * 5
       
//viene scritto nella pagina (nel nostro caso nella "WebView") il contenuto della variabile "a":
     document.write(a);

   }

   </script>

<body>

 <input type="button" onclick="calcolo()" value="Calcola">

</body>
</html>

Invece, il codice Gambas è il seguente:

Public Sub Button1_Click()

' Andiamo a caricare il file html per eseguirlo mediante l'oggetto "WebView":
  WebView1.Url = "/percorso/del/file.html"


' Utilizziamo la proprietà ".Text" dell'oggetto "WebView", per leggere quanto scritto dal metodo "document.write()" del codice "JavaScript":
   TextEdit1.RichText = WebView1.Text

End


Esempio con un file .js esterno

In questo secondo esempio faremo uso, come nell'esempio del primo paragrafo, di un file .js (o altro semplice file di testo) esterno, il quale questa volta avrà un codice fisso.


Il file .js sarà richiamato da un file ".html", il codice del quale sarà il seguente:

<HTML>

 <SCRIPT type="text/JavaScript">

 
// Dichiara ed istanzia una variabile che sarà utilizzata anche nel file ".js":
   var c = 2

 
</script>

 <SCRIPT src="/percorso/del/file.js"></script>

 <SCRIPT>

 
   var a = 2

  document.write( a + b)


 </script>

</html>


Invece, il codice fisso nel file .js è il seguente:

  window.alert("Il valore della variabile 'c' e': " + c)

// Utilizziamo anche la variabile "c" dichiarata ed istanziata nel codice HTML principale:
  var b = 10 * c


Il codice Gambas sarà:

Private wv As WebView


Public Sub Form_Open()

  With wv = New WebView(Me)
' Richiamiamo il file html:
   .Url = "/percorso/del/file.html"
  End With

End


Public Sub Button1_Click()

' Utilizziamo la proprietà ".Text" dell'oggetto "WebView", per leggere quanto scritto dal metodo "document.write()" del codice "JavaScript":
   TextEdit1.RichText = wv.Text

End



Note

[1] Il salvataggio di un file di testo mediante il protocollo JavaScript è possibile se nel proprio sistema è presente la risorsa GeckoActiveXObject.

[2] Analogamente, con la proprietà WebView.Text si potrà leggere anche il contenuto di una pagina web caricata da internet.