JavaScript Interop síncrono no Blazor

Nesse artigo veremos que, se necessário, podemos usar os recursos de Interop do JavaScript de forma síncrona.

IJSRuntime

Se você não sabe o que é o JavaScript Interop, sugiro que você leia esse artigo, onde explicamos a questão de interoperabilidade entre o Blazor e o JavaScript.

O IJSRuntime é o serviço do Blazor que permite fazermos essa interoperabilidade com o JavaScript. Na prática, ele nos permite chamar funções JavaScript através de código C# em projetos Blazor.

Veja na Figura 1, um exemplo bem simples de como utilizar esse serviço.

Figura 1: Exemplo do uso do IJSRuntime

Observe que estamos chamando o método InvokeAsync, que irá disparar a função myJsFunctions.alerta. Essa função precisa estar em um arquivo javascript referenciado no index.html da aplicação.

Mas  o único método que temos no IJSRuntime é o InvokeAsync. Isso significa que o IJSRuntime não permite fazer uma chamada síncrona (sem usar o async/await).

IJSInProcessRuntime

Para resolver esse problema, podemos converter o IJSRuntime em seu descendente IJSInProcessRuntime, veja na Figura 2.

Figura 2: Exemplo do uso do IJSInProcessRuntime

O IJSInProcessRuntime tem o mesmo método do IJSRuntime, porém síncrono. É o método Invoke, como você pode ver na Figura 2.

Isso pode ser especialmente útil quando você precisar executar alguma chamada JavaScript no start da sua aplicação, onde tudo precisa ser executado de forma síncrona (sem o uso do async/await).

Grande Abraço e até o Próximo!