Así que tengo esta página simple:
@page "/" @inject IJSRuntime _jsRuntime <button @onclick="MakeSound">Make sound</button> <button @onclick="ShowPopUp">Show pop-up</button> @code { protected override void OnInitialized() { _jsRuntime.InvokeVoidAsync("makeSound"); _jsRuntime.InvokeVoidAsync("showPopUp"); } void MakeSound() { _jsRuntime.InvokeVoidAsync("makeSound"); } void ShowPopUp() { _jsRuntime.InvokeVoidAsync("showPopUp"); } }en el que tengo 2 botones: uno para reproducir un sonido y otro para mostrar una alerta. Funcionan bien, pero cuando trato de ejecutar estas acciones en la inicialización, solo aparece el mensaje de alerta y no hay sonido. ¿Por qué?
Por cierto, este es el JS, aunque tengo la sensación de que el problema no está aquí:
function makeSound() { var audio = new Audio("sounds/ding.wav"); audio.play(); } function showPopUp() { alert("Hello!"); }Llamar a la función de JavaScript en OnInitialized no funciona, porque DOM aún no se representa, OnAftrRender es el evento correcto para llamar a las funciones de JavaScript. Así que puedes probar así
protected override void OnAfterRender(bool firstRender) { if(firstRender) { _jsRuntime.InvokeVoidAsync("makeSound"); _jsRuntime.InvokeVoidAsync("showPopUp"); } }