PBToolboxAI v1 ← Site

webbrowser — u_pbt_webbrowser #

← Referência dos componentes · Índice do guia

Navegador web integrado na janela: apresentação de uma página, barra de endereço, histórico Anterior / Seguinte, menu de contexto de navegação.

Ver ao vivo — Aplicação de demonstração, mosaico Web browser: a pré-visualização, o código que o produz e esta página, lado a lado.


Em resumo #

Userobjectu_pbt_webbrowser
Classe de items— (componente sem items)
Serve paraApresentar uma página web, um portal interno, documentação em linha ou conteúdo HTML gerado, sem sair da aplicação
Dois modos de apresentaçãointegrado (predefinição) ou página inteira, consoante a tolerância do site visitado

Início rápido #

// event open da janela
uo_navigateur.ib_address_bar = true    // barra de endereco + botoes de navegacao
uo_navigateur.is_address = "https://pt.wikipedia.org/wiki/PowerBuilder"

Atribuir is_address é o ato de navegação: cada atribuição abre a página pedida. Um endereço sem protocolo ("exemplo.com") recebe automaticamente https://.


Propriedades #

PropriedadeTipoPredefiniçãoFunção
is_addressstring""Endereço apresentado. Atribuir esta propriedade aciona a navegação. Ao relê-la obtém a página realmente apresentada: se o utilizador seguir uma ligação, ela também a segue (ue_load_completed avisa). Todos os esquemas são aceites, incluindo data: e file:
ib_address_barbooleanfalseApresenta a barra de endereço integrada: campo URL, botões Anterior / Seguinte / Recarregar
ib_context_menubooleanfalseAtiva o menu de contexto de navegação com o clique direito: Anterior, Seguinte, Recarregar
is_theme_stylestringfluentEstilo visual do componente (constantes THEME_STYLE_*)
is_theme_modestringlightVariante clara ou escura (constantes THEME_MODE_*)
il_theme_accentlong-1Cor de destaque deste componente (-1 = destaque do tema)

Métodos #

MétodoFunção
of_refresh ( )Recarrega a página atual
of_go_back ( )Regressa à página anterior
of_go_forward ( )Avança para a página seguinte
of_can_go_back ( ) → booleantrue se existir uma página anterior — para ativar ou inativar o botão Anterior
of_can_go_forward ( ) → booleantrue se existir uma página seguinte
of_stop ( )Interrompe o carregamento em curso
of_execute_javascript (string as_script)Executa um script na página apresentada e devolve o respetivo valor sob a forma de cadeia (JSON: um texto regressa entre aspas, um número não). Uma só condição, e é estrutural: a página tem de ter terminado o carregamento, por isso chame-a a partir de ue_load_completed, nunca logo após definir is_address. Devolve uma cadeia vazia se o script falhar ou se não houver página
of_reset ( )Repõe o componente no estado inicial: página esvaziada, histórico de navegação apagado, barra de endereço oculta, menu de contexto desativado, regresso ao modo integrado
of_save_as_png (string) · of_save_as_jpg (string)Exporta a representação como imagem

Eventos #

EventoAcionado quando
ue_load_completed (string as_url)Uma página terminou de carregar; as_url é o endereço efetivamente apresentado
ue_ready ( )O componente terminou o carregamento; tudo o que foi enviado antes foi reproduzido
ue_runtime_missing ( )O runtime WebView2 está ausente: o componente permanece vazio
ue_bg_color (long al_color)O componente calculou a cor de fundo do respetivo tema; o userobject já a adotou (backcolor)

A barra de endereço integrada #

É a solução mais rápida: uma propriedade e o utilizador dispõe de um campo URL e dos botões Anterior / Seguinte / Recarregar, com o tema do resto da aplicação.

uo_navigateur.ib_address_bar = true
uo_navigateur.is_address = "https://pt.wikipedia.org/wiki/PowerBuilder"

Os botões ficam inativos automaticamente quando não há para onde ir.

Botões próprios #

Se preferir comandar a navegação a partir de uma barra de ferramentas própria, deve ocultar-se a barra integrada e utilizar os métodos:

// Botoes Anterior / Seguinte da sua janela
uo_navigateur.of_go_back()
uo_navigateur.of_go_forward()
// event ue_load_completed de uo_navigateur : (string as_url)
// Atualizar o estado dos seus botoes apos cada pagina
uo_barre.of_bar("main").of_item("precedent").ib_enabled = uo_navigateur.of_can_go_back()
uo_barre.of_bar("main").of_item("suivant").ib_enabled   = uo_navigateur.of_can_go_forward()

// E refletir o endereco real (incluindo redirecionamentos)
sle_url.text = as_url

O menu de contexto de navegação #

ib_context_menu acrescenta ao clique direito um pequeno menu Anterior / Seguinte / Recarregar, com tema e desenhado pela aplicação. Partilha exatamente o mesmo histórico que a barra de endereço: ambos permanecem, por isso, sempre coerentes.

uo_navigateur.ib_context_menu = true

Parar um carregamento #

// Botao Parar : interrompe uma pagina que demora
uo_navigateur.of_stop()

Sites que recusam a apresentação integrada #

Alguns sites — Google, a maioria dos bancos, muitas aplicações SaaS — enviam cabeçalhos de segurança que proíbem a sua apresentação dentro de outra página. O componente não é afetado: nunca apresenta um site numa moldura. A página é aberta como documento principal, exatamente como faz o seu próprio navegador, e esses cabeçalhos deixam de se aplicar.

Não há, portanto, nada a definir nem qualquer caso particular a tratar no seu código.

// Um site que recusa ser integrado numa pagina : nada de especial a fazer
uo_navigateur.ib_address_bar = true
uo_navigateur.is_address = "https://www.google.com"

Em contrapartida, a página ocupa toda a superfície do componente sob a barra de endereço: aquilo que desenhasse por cima (faixas, sobreposições com tema) não é visível durante a navegação.


Conteúdo HTML sem rede #

Qualquer endereço é aceite, incluindo uma página HTML fornecida diretamente. É prático para uma pré-visualização de correio, um ticket, uma fatura ou um relatório gerado pela aplicação, sem qualquer chamada de rede nem ficheiro temporário:

string ls_html

ls_html = "<html><head><meta charset='utf-8'></head><body>" &
        + "<h1>Resumo da encomenda</h1>" &
        + "<p>Obrigado pela sua confiança.</p>" &
        + "</body></html>"

uo_navigateur.is_address = "data:text/html," + ls_html

Um ficheiro local abre-se da mesma forma com file:///C:/temp/rapport.html.


Recomeçar do zero #

of_reset() não se limita a esvaziar a página: apaga também o histórico de navegação. Assim, um utilizador não pode regressar, através do botão Anterior, a uma página consultada pelo utilizador anterior ou noutro dossiê.

// Mudanca de dossie : recomeca-se com um navegador virgem, sem historico
uo_navigateur.of_reset()

uo_navigateur.ib_address_bar = true
uo_navigateur.is_address = ls_url_du_dossier

É o reflexo a ter sempre que um mesmo componente serve para apresentar conteúdos de contextos diferentes.


Exemplo completo #

// event open da janela : pagina inicial do portal interno
uo_navigateur.of_reset()                  // recomecar limpo (incluindo o historico)

uo_navigateur.ib_address_bar  = true      // campo URL + Anterior / Seguinte / Recarregar
uo_navigateur.ib_context_menu = true      // mesma navegacao com o clique direito
uo_navigateur.is_address = "https://intranet.empresa.pt/inicio"
// event ue_load_completed de uo_navigateur : (string as_url)
uo_statut.of_item("main").is_text = "Página carregada: " + as_url

Boas práticas #


← Referência dos componentes · Índice do guia