Problemas executando páginas HTML[RESOLVIDO]

Estou encontrando problemas ao executar uma página html dentro do E3, estou querendo abri ela em uma tela modal, quando executo me ocorre três avisos e não atualiza a pagina. Segue algumas fotos.

Erro%201

Erro%202

Erro%203

Script para abertura de modal

Programa HTML utilizado

html

É uma pagina muito simples, estou utilizando para testes somente, esse código executa no IE sem problemas.

Bom dia @Felipe_FKS

Chegou a fazer a configuração informada no artigo Utilizar o chrome em aplicações?

Atenciosamente,
Marco Antonio

@marco, utilizei agora, tinha imaginado que aquilo seria só se eu quisesse utilizar versões anteriores.

Mas utilizando aquele procedimento parou os erros. Porém a página não atualiza, modifiquei as escritas da página e não modificou dentro do E3, pelo navegador funcionou certinho.

Observei agora que existe como clicar com o botão direito e atualizar a página, e ela mudou corretamente, existe algum modo de fazer isso por script? Ou toda a vez terei que atualizar na mão.

Oi @Felipe_FKS,

Não sei qual é o objetivo final da página, mas precisa solicitar a atualização, caso seja apresentação de consulta e outros, um botão poderia fazer a atualização da tela, por exemplo reabrir.

Atenciosamente,
Marco Antonio

Sim @marco, seria para gerar alguns relatórios mais elaborados utilizando do html, o método de abrir seria eficaz? Pois antes eu fechava o E3 todo, abria novamente, e clicava no botão para abrir a modal, porém só atualizou a página quando pressionei com o botão direito e em atualizar.

Oi @Felipe_FKS,

Abrir a página novamente deve ser suficiente para atualizar. Outra opção é utilizar o ActiveX do Web Browser da Microsoft, nele existem métodos que podem ser executados de forma nativa, como por exemplo o “refresh”.

Atenciosamente,
Marco Antonio

Legal @marco, tem algum artigo do KB ou algo do tipo para me passar para utilizar o ActiveX?

Oi @Felipe_FKS,

Segue alguns artigos que falam do “Web Browser”:
KB-31263: Abrindo um navegador Internet Explorer a partir do E3.
KB-33934: Inserindo GIFs animados em uma tela.

Atenciosamente,
Marco Antonio

1 Like

@marco, bom dia!

Tenho outra dúvida a respeito de navegação em páginas HTML, então vou aproveitar esse tópico:

Seguindo as orientações que você listou acima, conseguí resolver o problema na exibição de páginas com “Javascript”, o que viabiliza totalmente a estratégia proposta pelo colega @Felipe_FKS, que é utilizar o WebBrowser para exibir formulários, relatórios ou gráficos muito complexos, o que é dificil e trabalhoso de criar no Studio mas muito fácil e rápido de criar utilizando certos Frameworks de desenvolvimento Web.

Agora me deparei com outro problema: A navegação entre elementos de uma página web com a tecla
TAB. Percebo que quando pressiono essa tecla o foco sai da página HTML, enquanto o comportamento esperado seria alternar o foco entre os elementos da página HTML.
É possível usar o TAB dentro da página?

Boa tarde @RegisKensy!

Como a página é uma camada dentro da camada de aplicação do E3, este comando não é repassado a ela, pois o TAB fica na camada de aplicação do E3.

Uma opção para tentar fazer a troca de elemento dentro da página de forma automática, seria tratar o evento de aplicação de valor do campo, por exemplo o enter, e fazer a troca do elemento.

Qualquer dúvida estou à disposição.

Atenciosamente,
Marco Antonio

1 Like

Obrigado @marco pelo retorno!

Enquando aguardava seu retorno eu venho buscando alternativas para contornar o problema, até o momento cheguei a mesma alternativa que você propôs, inclusive encontrei uma referência muito boa de como utilizar o comando ENTER para alternar entre os elementos da página.
Segue o link do artigo: https://stackoverflow.com/questions/24209588/how-to-move-focus-on-next-field-when-enter-is-pressed

1 Like

Muito bom @RegisKensy!

Seria isso mesmo!! Obrigado por compartilhar.

Atenciosamente,
Marco Antonio

Fui além e consegui resolver o problema, ao menos em uma primeira avaliação consigo usar a tecla TAB para alternar entre os elementos de um formulário da página.

Segue abaixo a solução:

  1. Essa estratégia utiliza a biblioteca JQquery, portanto inclua o seguinte trecho no seu HTML para carregar a biblioteca:
<script
  src="https://code.jquery.com/jquery-3.4.1.min.js"
  integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
  crossorigin="anonymous">
</script>
  1. Criar a expressão focusable na biblioteca JQuery:
<script>
jQuery.extend(jQuery.expr[':'], {
    focusable: function (el, index, selector) {
        return $(el).is('a, button, :input, [tabindex]');
    }
});
</script>
  1. Criar a função Javascript que irá mudar o foco para o próximo elemento na página:
<script>
function onNextElement() {
        var $canfocus = $(':focusable');
        var index = $canfocus.index(document.activeElement) + 1;
        if (index >= $canfocus.length) index = 0;
        $canfocus.eq(index).focus();
};
</script>

**Note que essa última função utiliza a biblioteca JQuery carregada no passo 1 e utiliza a expressão focusable criada no passo 2.

  1. No Studio, navegue até Ferramentas > Gerenciar ActiveX e registre a biblioteca Microsoft WebBrowser.

  2. Em uma tela adicione um objeto WebBrowser.

  3. No evento KeyUp da respectiva tela, adicione o seguinte script:

'Verifica se a tecla TAB foi pressionada
If KeyCode = 9 Then
	Set Browser = Item("WebBrowser1") 'Seleciona o objeto WebBrowser presente na tela
	Browser.SetFocus() 'Muda o foco novamente para o objeto WebBrowser
	Browser.Navigate "javascript:onNextElement()" 'Executa a função "onNextElement" presente na página
End if

Toda vez que a tecla TAB é pressionada, o E3 devolve o foco para o objeto WebBrowser presente na tela e executa a função javascript onNextElement() presente no documento que está sendo exibido no WebBrowser.

No meu caso funcionou perfeitamente. Como eu já utilizo a biblioteca JQuery em praticamente todas páginas, essa estratégia atende perfeitamente minhas necessidades. Caso você não utilize a biblioteca JQuery, tente substituir a função onNextElement() por outra escrita totalmente em Commom Javascript.

Essa estratégia pode ser adaptada também para alternar entre objetos de tela que não estejam em um formulário, para isso basta alterar a expressão focusable declarada na biblioteca JQuery.

1 Like

Para garantir navegabilidade total faça o seguinte:

No passo 3 substitua o script pelo seguinte:

<script>

function onNextElement() {
        var $canfocus = $(':focusable');
        var index = $canfocus.index(document.activeElement) + 1;
        if (index >= $canfocus.length) index = 0;
        $canfocus.eq(index).focus();
};

function onPreviousElement() {
        var $canfocus = $(':focusable');
        var index = $canfocus.index(document.activeElement) - 1;
        if (index >= $canfocus.length) index = 0;
        $canfocus.eq(index).focus();
};

</script>

No passo 6 substitua o script pelo seguinte:

'Verifica se foi pressionada a tecla "Tab"
If KeyCode = 9 Then
	Set Browser = Item("WebBrowser1") 'Seleciona o WebBrowser presente na tela
	Browser.SetFocus() 'Muda o foco novamente para o objeto WebBrowser
	
	'Verifica se a tecla "Shift" está pressionada
	If Shift Then
		Browser.Navigate "javascript:onPreviousElement()" 'Executa a função "onPreviousElement" presente na página
	Else	
		Browser.Navigate "javascript:onNextElement()" 'Executa a função "onNextElement" presente na página
	End if
End if

Agora é possível avançar nos elementos da página pressionando a tecla Tab e retroceder com Shift + Tab.