Exemplo de como abrir página WEB ou estática com TWebEngine em AdvPL

No artigo de hoje, vou mostrar como abrir uma página de internet ou html local via TWebEngine.

Esse artigo foi montado como base, do exemplo enviado pelo grande Jorge Alberto ( LinkedIn ). Você também pode visualizar outros exemplos dele no GitHub.

No caso pessoal, peguei o exemplo do Jorge, e fiz pequenas alterações, a lógica usada foi:

  • Mostrar uma pergunta, se deseja abrir um site de uma url ou de um arquivo local
  • Se for de uma página de internet, será aberto totvs.com, instanciando um TWebEngine e usando o método navigate para a url
  • Se for um arquivo local, será buscado o conteúdo do html em uma pasta na Protheus data, com o arquivo de nome AppletWeb.html. No caso, será instanciado um TWebEngine e o método usado para carregar o arquivo html é o SetHtml

Abaixo um print de exemplo:

Página totvs.com carregada dentro de uma dialog

E abaixo o código fonte desenvolvido pelo Jorge:

#INCLUDE "TOTVS.CH"
 
/*/{Protheus.doc} WebEng
Exemplo de abertura de página WEB ou estática com TWebEngine()
@type function
@version 12.1.25
@author Jorge Alberto
@since 30/06/2021
@obs Pequenas alterações e adaptações feitas por Daniel Atilio
/*/

User Function WebEng()
    Local aArea := GetArea()
    Local aParamBox := {}
    
    //Adicionando os parâmetros que serão utilizados
    aAdd( aParamBox,{3,"Tipo de página", 1,{"WEB","HTML Local"},50,"",.T.} )
	
    //Se a pergunta for confirmada
    If ParamBox( aParamBox, "exemplo")
        //Se for a primeira opção será uma página de internet
        If MV_PAR01 == 1
			WEB()

        //Senão, será um html local
		Else
			HTML()
		EndIf
    EndIf
    
    RestArea(aArea)
Return

/*/{Protheus.doc} WEB
Página HTML da Web
@type function
@version 12.1.25
@author Jorge Alberto
@since 30/06/2021
@obs Pequenas alterações e adaptações feitas por Daniel Atilio
/*/

Static Function WEB()
    Local aSize       := MsAdvSize()
    Local nPort       := 0
    Local cUrl        := "https://www.totvs.com/"
    Local oModal
    Local oWebEngine 
    Private oWebChannel := TWebChannel():New()
    
    //Cria a dialog
    oModal := MSDialog():New(aSize[7],0,aSize[6],aSize[5], "Página Web",,,,,,,,,.T./*lPixel*/)
    
        //Prepara o conector
        nPort := oWebChannel::connect()

        //Cria o componente que irá carregar a url
        oWebEngine := TWebEngine():New(oModal, 0, 0, 100, 100,/*cUrl*/, nPort)
        oWebEngine:bLoadFinished := {|self, url| /*conout("Fim do carregamento da pagina " + url)*/ }
        oWebEngine:navigate(cUrl)
        oWebEngine:Align := CONTROL_ALIGN_ALLCLIENT
    oModal:Activate()
 
Return

/*/{Protheus.doc} HTML
Página HTML local
@type function
@version 12.1.25
@author Jorge Alberto
@since 30/06/2021
@obs Pequenas alterações e adaptações feitas por Daniel Atilio
/*/

Static Function HTML()
    Local aSize       := MsAdvSize()
    Local nPort       := 0
    Local cPasta      := "\x_web\"
    Local cHtml       := cPasta + "AppletWeb.html"
    Local oModal
    Local oWebEngine 
    Private oWebChannel := TWebChannel():New()
    
    //Se a pasta não existir, cria a pasta
    If ! ExistDir(cPasta)
        MakeDir(cPasta)
    EndIf

    //Se o arquivo não existir, cria um vazio
    If ! File(cHtml)
        MemoWrite(cHtml, "<h1>Arquivo não encontrado!</h1>")
    EndIf

    //Cria a dialog
    oModal := MSDialog():New(aSize[7],0,aSize[6],aSize[5], "Página Local",,,,,,,,,.T./*lPixel*/)

        //Prepara o conector
        nPort := oWebChannel::connect()

        //Cria o componente que irá carregar o arquivo local
        oWebEngine := TWebEngine():New(oModal, 0, 0, 100, 100,/*cUrl*/, nPort)
        oWebEngine:SetHtml( MemoRead(cHtml) )
        oWebEngine:Align := CONTROL_ALIGN_ALLCLIENT
    oModal:Activate()
Return

Obs.: No passado eu montei um exemplo de TWebEngine, inclusive com execução de Javascript, caso você tenha interesse em visualizar, clique aqui.

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta