Как проверить, закончил ли iframe в серверном приложении Blazor загрузку содержимого?

#javascript #iframe #blazor

#javascript #iframe #blazor

Вопрос:

Я загружаю разные htmlстраницы внутри Iframe в серверном приложении blazor. Чтобы изменить содержимое Iframe, я использую несколько кнопок. При нажатии кнопки в Iframe загружается соответствующая Html-страница (один Iframe — разное содержимое — изменен нажатием кнопки).

Как я могу проверить, полностью ли загружено содержимое после щелчка? Причина этого в том, что прямо сейчас, если пользователь нажимает разные кнопки для быстрого перехода одна за другой, Iframe вообще не отображает содержимое (только фоновый цвет базовой сетки и столбы). Могу ли я получить обратно значение bool после завершения загрузки Iframe?

Пожалуйста, я не был бы в Blazor, если бы у меня были знания из Js. Я нашел сообщения, в которых js является решением для этого, но. Я не знаю, как правильно внедрить это в мое приложение blazor. Я не могу просто скопировать этот js в hmtlpage. Он должен быть в файле _Host.cshtml, но если я помещу его туда…документ.querySelector(‘myIframe’).addEventListener… в консоли developmenttools указано значение null. Спасибо за помощь. Пожалуйста, если это связано с js, будьте так добры и попытайтесь объяснить это мне, как вы бы объяснили nuub (что я имею в виду :).

 <script type="text/javascript">
        document.querySelector('myIframe').addEventListener("load", ev => {
            console.log('iframe is completely loaded');
        })
</script> 

Комментарии:

1. После множества неудачных попыток! Возможно ли вообще выполнить эту строку js в Blazor: document.getElementById(‘myFrameID’).onload = function () { alert(‘iFrame Loaded’)}; Я не смог заставить это предупреждение работать на сервере Blazor. Он работает в «обычном» index.html страница. После изучения этого подробнее. Кто-нибудь знает, в какой момент blazor может получать события js? Это даже в MS DoT-List? Это возможно каким-то образом -> см. nuget github.com/EdCharbeneau/BlazorSize но для меня это слишком сложно. Любая идея, что делать, кроме того, должна иметь learnd Vue вместо этого: (

Ответ №1:

Blazor может абсолютно получать DOM-события, и вы можете присоединяться к событиям непосредственно в коде razor без необходимости использования JS, чтобы вы могли писать свою логику с помощью C #.

Хитрость заключается в том, чтобы префикс события с @ , как @onload в вашем примере, который затем принимает EventCallback / Метод в качестве параметра.

 <iframe src="https://some.embeddedsite.com" @onload="IFrameLoaded" />

@code {
    private void IFrameLoaded(ProgressEventArgs e)
    {
        Console.WriteLine("IFrame loaded");
    }
}
 

Смотрите документы по ASP.NET Основная обработка событий Blazor для получения дополнительной информации.


Но можно также задаться вопросом, почему старомодный способ, который вы пытаетесь использовать сейчас, не работает… И на это у меня нет ответа, более того, я тоже боролся с тем же самым в прошлом. Кажется, blazor использует события для самостоятельной поддержки, и при этом часто «настроенные вручную» события теряются. Однако в последнее время у меня было меньше проблем с этим, поскольку я больше придерживался «блейзорского пути» ведения дел.

Комментарии:

1. Это работает, большое вам спасибо! Я потратил несколько часов на то, чтобы заставить это работать. Сейчас смешанные чувства: рад, что это так просто и работает, расстроен, что я потерял на это так много времени 🙂 Есть ли хорошее место / страница, чтобы увидеть / изучить все @on… События для blazor?

2. @nogood, в основном он охватывает большинство DOM-событий, и IntelliSense должен предоставить список доступных — хотя для его работы событие также должно фактически существовать и для узла DOM. Но документы по обработке событий Blazor — это всегда хорошее место для начала.