Italian Webview: estrarre dati calcolati da javascript

Paperinik

Member
Licensed User
Longtime User
Buongiorno a tutti,
in una webview, carico una pagina web che contiene in un form, del codice javascript.
I dati calcolati da questo codice, alla pressione di un pulsante presente nella pagina stessa, vengono poi inviati al server tramite POST.
Leggendo il sorgente della pagina vedo ovviamente, solo il codice.

Nella mia app devo inviare il POST con HttpUtils; come posso fare per estrarre i dati calcolati dal javascript?
Come alternativa, potrei leggere i dati inviati dal POST successivamente alla pressione del pulsante?
 

Paperinik

Member
Licensed User
Longtime User
Un aiutino in più?
Quale metodo devo usare per leggere i dati di cui ho bisogno?

Ho già la WebViewExtra installata e caricata nel mio progetto in quanto la uso per leggere il sorgente dalla webview.
 

MarcoRome

Expert
Licensed User
Longtime User
Un aiutino in più?
Quale metodo devo usare per leggere i dati di cui ho bisogno?

Ho già la WebViewExtra installata e caricata nel mio progetto in quanto la uso per leggere il sorgente dalla webview.

Paperinik...leggi le 18 paginette del link che ti ho inviato vedrai che qualcosa di interessante lo troverai come ad esempio:

B4X:
var startmarker = new google.maps.Marker({
       position : latLng,
       map : map,
       draggable: true,
       icon : icon1,
       title : Nome
     });

  infowindow = new google.maps.InfoWindow({
  content: contentString
  });

  google.maps.event.addListener(startmarker, "click", function() {
       infowindow.open(map,startmarker);
  });

  google.maps.event.addListener(startmarker, "dragend", function() {
       var lat = startmarker.position.lat();
       var lon = startmarker.position.lng();
       var scoord = lat + ":" + lon;
       changeCoordPersona(scoord);
  });


function changeCoordPersona(scoord) {
        B4A.CallSub("ChangeCoordPersona",true,scoord);
    }

oppure:
B4X:
Sub Process_Globals
End Sub

Sub Globals
   Dim WebViewExtras1 As WebViewExtras
   Dim WebView1 As WebView
End Sub

Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("layoutMain")
  
   '   add the B4A javascript interface to the WebView
   WebViewExtras1.addJavascriptInterface(WebView1, "B4A")
  
   '   adding a WebChromeClient will log all browser console message to the android log
   '   so any webpage or javascript errors will be logged
   WebViewExtras1.addWebChromeClient(WebView1, "")
  
   '   now load a web page
   WebView1.LoadUrl("http://www.b4x.com/android/forum/threads/getting-the-source-code-of-a-webpage-with-webview-and-webviewextras.34418/#post-202076")
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub WebView1_PageFinished (Url As String)
   '   Now that the web page has loaded we can get the page content as a String
  
   '   see the documentation http://www.b4x.com/forum/additional-libraries-classes-official-updates/12453-webviewextras.html#post70053 for details of the second parameter callUIThread
  
   Dim Javascript As String
   Javascript="B4A.CallSub('Process_HTML', false, document.documentElement.outerHTML)"
  

   Log("PageFinished: "&Javascript)
   WebViewExtras1.executeJavascript(WebView1, Javascript)
End Sub

Sub Process_HTML(Html As String)
   '   This is the Sub that we'll get the web page to send it's HTML content to
  
   '   Log may truncate a large page so you'll not see all of the HTML in the log but the 'html' String should still contain all of the web page HTML
  
   Log("Process_HTML: "&Html)
End Sub
 

Paperinik

Member
Licensed User
Longtime User
Grazie per la risposta Marco, ma io ho letto già tutte le paginette del tread.
Premesso che purtroppo capisco poco di javascript, non sono riuscito a trovare che mi potesse aiutare.

Non capisco il codice che mi hai consigliato... il primo mi sembra qualcosa relativo alla geolocalizzazione tramite la webview, il secondo è quello che già utilizzo per leggere il sorgente html della pagina in questione.

Con quel codice riesco ad ottenere il sorgente javascript, mentre io ho bisogno dei dati elaborati dallo script e successivamente inviati al server con il post
 

MarcoRome

Expert
Licensed User
Longtime User
E' per farti vedere che in ogni caso puoi eseguire un pò di tutto...se vedi ad un certo punto fa la chiamata:

B4X:
B4A.CallSub("ChangeCoordPersona",true,scoord);

dove passa una variabile eseguita nello script ad una sub di B4A
 

hatzisn

Well-Known Member
Licensed User
Longtime User
Non conoscevo questa libreria MarcoRome. Grazie molte per farmi conoscerla e per il tuo esempio.
 
Top