B4A nao executa comandos JavaScript

Boa noite colegas, estou tentando fazer uma rotina para rodar comandos em javascript.
É para preencher alguns campos de input da página, criada por um ESP8266.
O WebBrowser1 carrega a página ok, mas quando dou o botão 2 para preencher avisa que executou o comando: Executing javascript: document.querySelector('[name=txt_IP1]').value = 192
Mas nada acontece na página:
Eu conferi o comando no browser do pc e está correto (imagem), mas quando tento rodar no celular nada acontece.

Desde já eu agradeço qualquer ajuda dos colegas.

Abs.

Imagens das telas:
Programa: (versão zipada no anexo)
Programa B4A para preencher input de site.PNG


Tela do celular:
Tela do celular.jpeg


Tela Javascript funcionando no browser do PC:
Tela JS ok browser micro.PNG
 

Attachments

  • Web_02.zip
    9.5 KB · Views: 217

Rubsanpe

Active Member
Licensed User
Olá. Como você faz o link do conteúdo da webview para o código javascript que você deseja executar na webview? Em seu código você apenas cria a string com o código, mas não vê como o executa na visualização da web. No navegador do scritório você está usando o console na página carregada.

Veja isto

B4X:
https://www.b4x.com/android/forum/threads/signature-capturing-with-jsignature-and-webviewextras.96451/

Rubén
 
Olá. Como você faz o link do conteúdo da webview para o código javascript que você deseja executar na webview? Em seu código você apenas cria a string com o código, mas não vê como o executa na visualização da web. No navegador do scritório você está usando o console na página carregada.

Veja isto

B4X:
https://www.b4x.com/android/forum/threads/signature-capturing-with-jsignature-and-webviewextras.96451/

Rubén
Obrigado pelo retorno Rubén. Eu não entendi preciso referendar à página WEB ? No programa eu a carrego no WebView1, o comando não deveria funcionar como no PC ?
Eu preciso adicionar mais algum comando de referência à pagina ? Desculpe a ignorância mas estou aprendendo e no meu entendimento deveria já atuar na página WebView1, que fou declarada como "true" e se encontra aberta no programa. Minha analogia está errada ? Desde já agradeço a atenção dispensada Abs.
 

Attachments

  • WhatsApp Image 2022-07-22 at 14.58.39.jpeg
    WhatsApp Image 2022-07-22 at 14.58.39.jpeg
    54.4 KB · Views: 197
Por exemplo eu digito o comando, no delphi 14, para o fundo ficar verde e funciona !
WebBrowser1.EvaluateJavaScript('document.body.style.backgroundColor = "green"'); ---- OK
Por isto eu não entendo por que o comando de preenchimento do campo input não funciona, pois pelo comando acima o WebBrowser1 é o "alvo" do comando.
No delphi 5 o comando funciona.
WebBrowser1.OleObject.Document.all.Item('txt_IP1', 0).value := '192'; ----- OK
No delphi 14 o comando não funciona !
WebBrowser1.EvaluateJavaScript('document.querySelector("[name=txt_IP1]").value = 192')
O Delphi 14 não deveria executar qualquer comando em JavaScript ? Será que tem alguma limitação ao uso do JS ?
 

TILogistic

Expert
Licensed User
Longtime User
veja esses links, é para B4X.
 
Eu até mudei minha foto, as orelhas grandes não me deixam entender como não consigo fazer isto acontecer !
Como eu faço para "debugar" o comando enviado ?
Eu tentei usar a biblioteca WebViewExtras1 mas não deu certo ainda !
---> WebViewExtras1.executeJavascript($"document.querySelector('[name=txt_IP1]').value = 192"$)
 

drgottjr

Expert
Licensed User
Longtime User
B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    Dim webview As WebView
    Dim wvx As WebViewExtras
    Dim button As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    webview.Initialize("webview")
    Activity.AddView(webview, 0%x,0%y,100%x,100%y)
    wvx.addWebChromeClient(webview, "wvx")
    
    button.Initialize("button")
    Activity.AddView(button, 75%x,90%y,25%x,8%y)
    button.Text = "update"
    button.BringToFront
    webview.LoadUrl("http://192.168.1.12:8000/test.html")
End Sub

Sub button_click
    wvx.executeJavascript(webview,"document.querySelector('[name=txt_IP1]').value = 192;")
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub webview_PageFinished (Url As String)
    Log("page finished")
End Sub
 

Attachments

  • paulo1.png
    paulo1.png
    24.1 KB · Views: 190
  • paulo2.png
    paulo2.png
    24.3 KB · Views: 183
B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    Dim webview As WebView
    Dim wvx As WebViewExtras
    Dim button As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    webview.Initialize("webview")
    Activity.AddView(webview, 0%x,0%y,100%x,100%y)
    wvx.addWebChromeClient(webview, "wvx")
   
    button.Initialize("button")
    Activity.AddView(button, 75%x,90%y,25%x,8%y)
    button.Text = "update"
    button.BringToFront
    webview.LoadUrl("http://192.168.1.12:8000/test.html")
End Sub

Sub button_click
    wvx.executeJavascript(webview,"document.querySelector('[name=txt_IP1]').value = 192;")
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub webview_PageFinished (Url As String)
    Log("page finished")
End Sub
B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    Dim webview As WebView
    Dim wvx As WebViewExtras
    Dim button As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    webview.Initialize("webview")
    Activity.AddView(webview, 0%x,0%y,100%x,100%y)
    wvx.addWebChromeClient(webview, "wvx")
   
    button.Initialize("button")
    Activity.AddView(button, 75%x,90%y,25%x,8%y)
    button.Text = "update"
    button.BringToFront
    webview.LoadUrl("http://192.168.1.12:8000/test.html")
End Sub

Sub button_click
    wvx.executeJavascript(webview,"document.querySelector('[name=txt_IP1]').value = 192;")
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub webview_PageFinished (Url As String)
    Log("page finished")
End Sub
Funcionou certinho agora ! Muito obrigado !
 
Sub button_click
wvx.executeJavascript(webview,"document.querySelector('[name=txt_IP1]').value = 192;")
End Sub

Esta solução dada por drgottjr funcionou muito bem quando temos o numero "192" no comando de JS, entretanto quando fui diversificar como por exemplo:
EditText1.Text = "192";
wvx.executeJavascript(webview,"document.querySelector('[name=txt_IP1]').value = "+EditText1.Text+";")
Apresentou a seguinte falha: java.lang.NumberFormatException: For input string: "document.querySelector('[name=txt_A]').value ="


1659878085377.png


Não deveria concatenar o texto e substituir EditText1.Text por 192 e funcionar ?
Tentei também colocar todo o texto em uma string mas não deu certo !

Alguém pode dar alguma ajuda aqui ? Obrigado.

Abs
 

TILogistic

Expert
Licensed User
Longtime User
?
B4X:
wvx.executeJavascript(webview1,$"document.querySelector('[name=txt_IP1]').value = ${EditText1.Text};"$)

 
?
B4X:
wvx.executeJavascript(webview1,$"document.querySelector('[name=txt_IP1]').value = ${EditText1.Text};"$)

Funcionou legal para números, mas para texto eu não sei o que estou errando.
Os campos EditText5.Text e EditText6.Text na interface estão como TEXT , não deveria aceitar o texto digitado ?
1659989855523.png


Desde já agradeço a ajuda da comunidade em especial Omar Parra e drgottjr.

No pouco que conheço de programação EditText5.Text deveria ser uma sequência de caracteres . Tentei até "converter" para uma variável string (s) mas não deu certo.

Aproveitando peço que indiquem o comando para ativar o click no botão enviar da página.

Novamente agradeço decoração a ajuda da comunidade. Abs
 

Attachments

  • Erro_Campo EditText para Webpage.PNG
    Erro_Campo EditText para Webpage.PNG
    93.5 KB · Views: 188
  • Erro_Campo EditText para Webpage_Prog.PNG
    Erro_Campo EditText para Webpage_Prog.PNG
    59.5 KB · Views: 185

TILogistic

Expert
Licensed User
Longtime User
click button

RunJavaScript($"document.getElementById("btnGuess").click();"$)

see:
it is multiplatform B4X
 
e faça upload de um exemplo para ajudá-lo a entender o que deseja fazer.
Obrigado amigos, agora deu certo, deixa eu falar do projeto para entendimento.
Trata-se de uma interface para comunicar com o Node8266 , tem uma pagina html para entrada de nodos dados de rede, que podem ser configurados pelo browser.
conforme voces podem ver na pagina abaixo: (web, arduino e inspeção)
Tela html config rede.PNG
Tela html config rede_Fonte ESP8266.PNG
Tela html config rede_Inspeção pagina.PNG

Como eu sou professor de eletrônica, gostaria que meus alunos praticassem com este módulo que é barato e excelente para aprendizado.
Assim aprendem um pouco de arduino (C), noções de html além de eletrônica.
Eu fiz um programa em delphi para gravar no ESP as configurações de rede, sem precisar do browser:
Exemplo do programa em Delphi5.PNG

Como nem todos tem computador, eu resolvi que iria fazer um programa para gravar através do celular (android), daí o uso do B4A; que eu pretendo adotar como linguagem e ensinar meus alunos, mas para isto eu preciso praticar antes de ensinar, neste caso o desafio era fazer esta interface para conhecer e aprender sobre o B4A.
Agora que eu consegui vencer este desafio, me sinto mais seguro em passar para frente este conhecimento. Sei que inda tem bastante para eu aprender, por isto vou preparar outros desafios para mim mesmo !
O programa que funcionou ficou assim:
Programa que funciona.PNG
Designe do programa.PNG
Imagem programa funcionando.jpeg


Ainda tenho um caminho pela frente: fazer alguns teste e instalar no celular de forma "independente" , depois preparar um tutorial para ensinamento.

Gostaria de agradecer à comunidade em especial ao Omar, que tem nos ajudado.

Um grande abraço à todos.
 

Attachments

  • Tela html config rede.PNG
    Tela html config rede.PNG
    26.4 KB · Views: 201
Top