У меня есть аудиоэлемент HTML5, и его источник указывает не непосредственно на mp3-файл, а на действие в контроллере, который возвращает или mp3-файл (FileResult), или null. Получение результата занимает некоторое время (1 мин), поэтому я реализовал счетчик.
Если файл существует, проблем нет, я использую событие «onloadeddata» аудио, чтобы остановить вращение. Но если нет файла, я не могу поймать событие, так что вращается спиннер, но звук становится недоступным (серые тона).
Отредактировано: перехват события 'error' на аудиоэлементе работает в Firefox, а не в Chrome, IE или Edge (мне нужно, чтобы он работал в Chrome и IE)
Я попробовал эти события аудио (прервать, очистить, ошибка, остановлено, приостановить) и ничего. Я тоже перепробовал событие source (onerror), но ничего.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<audio id="audioplayer" controls controlsList="nodownload" preload="none">
<source id="sourceId" src="<%: Url.Action("Play", "Call", new { id = calledNumber.Id }) %>" type="audio/mpeg" />
Your browser does not support the
<code>audio</code> element.
</audio>
отредактировано ответом @Rory McCrossan:
$('#audioplayer').on({
'play': function (e) {
if (!$(this).data('loaded')) {
displayBusyIndicator();
}
},
'loadeddata': function (e) {
if (isNaN(this.duration) || this.duration === 0) {
hideBusyIndicator();
} else {
hideBusyIndicator();
$(this).data('loaded', true)
}
},
'error': function (e) {
hideBusyIndicator();
}});
public FileResult Play(int id)
{
try
{
// getting stream of file
// ....
var stream = client.OpenRead(url);
return File(stream, "audio/mpeg");
}
catch(Exception e)
{
//logging and other actions
Response.StatusCode = 404;
return null;
// I tried also return File(Stream.Null, "audio/mpeg");
}
}
Для существующего файла работает нормально. Но из-за нулевого результата действия Play в контроллере вызова я не могу отловить событие нулевого источника или недоступного аудиоэлемента.
Отредактировано: работает в Firefox, а не в Chrome, IE или Edge (мне нужно, чтобы оно работало в Chrome и IE)
Пожалуйста, помогите.