Italian [ risolto ] Iniettare codice java Script

Xfood

Expert
Licensed User
Credo che sia questo il metodo per cercare
<div class="input-group containerSearchBar">
<input id="linkCodeInput" type="text" class="form-control searchBar inputSearchBar" placeholder="Barcode articoli">
<span class="input-group-addon searchBar RequestBtn nip-zoom" id="linkRequestBtn"></span>
</div>

document.getElementById("linkRequestBtn").click();
 

Xfood

Expert
Licensed User
uffa non funziona
troppo bello per essere vero
ho fatto un salto in ufficio perche domani mattina volevo dormire

ecco il codice che ho provato
B4X:
Sub Globals
    Dim WebJava As WebViewExtras
    Private WebView1 As WebView
    Private BtnInietta As Button
    Private EditText1 As EditText
    Private BtnQuit As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("1")
    WebJava.addWebChromeClient(WebView1, "WebJava")
    WebView1.LoadUrl("http://192.168.1.195/")
End Sub


Private Sub BtnInietta_Click
    Dim StringaJava As String="document.getElementById('linkCodeInput').value='" & EditText1.Text.Trim & "';"
    WebJava.executeJavascript(WebView1,StringaJava)
    WebJava.executeJavascript(WebView1,"document.getElementById('linkRequestBtn').click();")

End Sub

Private Sub BtnQuit_Click
    Activity.Finish
    ExitApplication
End Sub

ecco il log di errore

Uncaught TypeError: Cannot set properties of null (setting 'value') in http://192.168.1.195/it-IT/Profimax/IndexPda (Line: 1)
Uncaught TypeError: Cannot read properties of null (reading 'click') in http://192.168.1.195/it-IT/Profimax/IndexPda (Line: 1)
 

Xfood

Expert
Licensed User
Con il telefono, ho scaricato la pagina in html, e credo che i controlli da popolare e da usare come click siano questi

B4X:
<form id="formInputFieldLink" class="formInputField" method="get">
            <input type="text" class="inputTextLink">
            <div class="searchContainer searchButtonNoIE fa nip-zoom nip-2x">
                <input type="image" class="searchButtonLink" src="http://192.168.1.195/Content/Images/Pda/SearchIcon.gif">
            </div>
        </form>
Ma non so come trasformarlo in javascript iniector
 

drgottjr

Expert
Licensed User
Longtime User
il pezzetto di codice funziona.

ho detto: "a seconda del codice ..."
l'elemento linkRequestBtn non e' un botone, ma uno "span". metti un botone (chiamato linkRequestBtn) e prova.
prima, non so se uno span e cliccabile (ho da fare un po' di ricerca), ma non lo credo. secondo, al minimo devi aggiungere un
"listener" (si', esistono anche in javascript). un botone ha gia il suo listener, capisci? un elemento che non sia un botone non en ha.
e necesario aggiungere uno. quindi, parliamo di piu di codice a iniettare... e molto piu facile se linkRequestBtn fosse un vero botone.
 

Attachments

  • 1.png
    1.png
    5.3 KB · Views: 169
  • 2.png
    2.png
    20.5 KB · Views: 167
Last edited:

Xfood

Expert
Licensed User
risolto, risolto,risolto

ecco il mio codice funzionante
B4X:
Log("prova iniector")
    'getElementsByClassName()
    WebJava.executeJavascript(WebView1,"document.getElementsByClassName('inputTextLink')[0].value='0000080177609';")
    WebJava.executeJavascript(WebView1,"document.getElementsByClassName('searchButtonLink')[0].click();")
adesso posso andare a dormire

grazie mille @drgottjr , @LucaMs
 

Xfood

Expert
Licensed User
scusate, so che avevo messo risolto,
adesso dovrei leggere questo valore
come posso leggerlo?

la risposta dovrebbe essere o cosi, se non trova l'articolo,
<div id="dataResponseLink" class="dataResponse operationFeedbackKO" style="display: block;">
<span>Articolo non trovato</span>
</div>

oppure cosi se lo trova
<div id="dataResponseLink" class="dataResponse operationFeedbackOK" style="display: block;">
<span>Articolo trovato</span>
</div>
 

Xfood

Expert
Licensed User
utilizato questo stratagemma ( accrocchio)

B4X:
    WebViewExtras1.executeJavascript(WebView1,$"document.getElementsByClassName('inputTextLink')[0].value=${cResultcode};"$)
    WebViewExtras1.executeJavascript(WebView1,"document.getElementsByClassName('searchButtonLink')[0].click();")
        Sleep(900)
        Dim Javascript As String
        Javascript="B4A.CallSub('Process_HTML', false, document.documentElement.outerHTML)"
        WebViewExtras1.executeJavascript(WebView1, Javascript)
        
Sub Process_HTML(Html As String)
    Html.GetBytes("UTF8")
    Dim pos As Int = Html.IndexOf("operationFeedbackKO")
    Log(pos)
    If pos >1 Then   ' ko non trovato'
        PlaySound(5)
    Else     ' trovato'
        PlaySound(4)
    End If
End Sub
 

sirjo66

Well-Known Member
Licensed User
Longtime User
quando di un elemento hai un ID ti conviene sempre usare quello
Nel tuo caso, per leggere la risposta farai:
B4X:
JavaScript = "B4A.CallSub('Process_HTML', false, document.getElementById('dataResponseLink').innerText)"
 
Last edited:

Xfood

Expert
Licensed User
quando di un elemento hai un ID ti conviene sempre usare quello
Nel tuo caso, per leggere la risposta farai:
risposta = document.getElementById('dataResponseLink').innerText;
Scusami, quindi cosi:
Javascript= "document.getElementById('dataResponseLink').innerText;"


Risposta =WebViewExtras1.executeJavascript(WebView1, Javascript)
 
Top