К обсуждениям

Safari Technology Preview 251: повторный close AudioContext отклоняется

Редакция VOne Технологии

Safari Technology Preview 251: повторный AudioContext.close не отклоняет promise и teardown ошибочно считает второе закрытие успешным. People-first проверка: машина teardown «state → close #1 → settled → close #2 → rejection»; синтетический стенд, опровержимый контроль, один обратимый шаг, stop-line и минимизированный handoff.

Ответ и граница: Web Audio

Начните не с переключения настроек, а с проверяемой границы. Запрос «как проверить reject повторного AudioContext close в Safari Technology Preview 251» относится только к ситуации: повторный AudioContext.close не отклоняет promise и teardown ошибочно считает второе закрытие успешным. Условие успеха записывается до запуска: первый close завершает state closed, второй promise отклоняется и не создаёт ложный успешный teardown. Внешне похожая ошибка сама по себе ничего не доказывает; отдельно проверяется ловушка «unhandledrejection из другого promise, ошибочно связанный со вторым AudioContext.close». Похожий внешний эффект не равен той же причине: feature detection, версия и неизменяемые условия фиксируются заранее; отсутствие API означает unsupported, а отсутствие наблюдения — unknown. Производственный сайт, реальный аккаунт и пользовательские данные исключены.

Что подтверждают Release 251 и 318522@main

Официальные WebKit Release Notes датированы 26 августа 2026 года и для Safari Technology Preview 251 сообщают: AudioContext.close теперь отклоняется при вызове на уже закрытом context. Строка релиза ведёт к первичной записи 318522@main; её commit title и доступность перепроверены 29 августа. Эта доказательная база ограничена кодовым изменением TP 251. Она не обещает перенос в stable Safari, индексацию статьи или воспроизведение на стороннем сайте. Технический предел статьи совпадает с формулировкой 318522@main и не расширяется поисковым заголовком.

Стенд и рабочий артефакт 318522

Стенд: пустой AudioContext без media input и без пользовательского аудио, последовательный журнал двух close promises. До воздействия без интерпретации запишите: context.state, номер close, promise status, exception.name, settlement order и число statechange. Рабочий артефакт — машина teardown «state → close #1 → settled → close #2 → rejection». Паспорт опыта хранит только технические величины, необходимые для опровержения. Cookie, IP, bearer-данные, локальные пути, приватные URL и рабочие документы в него не попадают. Наблюдение не интерпретируется до прохождения control и финального cleanup.

Контроль, который может опровергнуть гипотезу

Контроль готовят до canary, иначе он превращается в объяснение задним числом. Для этой боли используется: новый context с единственным close и проверка feature/policy до создания. Он проходит тот же порядок запуска, settle-событие и набор полей, что основная ветка. Риск «unhandledrejection из другого promise, ошибочно связанный со вторым AudioContext.close» получает отдельный признак. Сравнение готовят заранее и не переписывают после результата. Только раздельная реакция canary/control позволяет связать наблюдение с проверяемым условием. Такой дизайн делает тезис опровержимым и не требует доступа к исходным данным пользователя.

Одно обратимое воздействие

Разрешён один шаг: закрыть пустой context один раз, затем вызвать close повторно и удалить ссылку. Сначала снимите baseline, затем выполните только указанную операцию, дождитесь заранее выбранного события завершения и повторите поля «context.state, номер close, promise status, exception.name, settlement order и число statechange». Операция выполняется один раз на synthetic fixture. Повторный baseline после cleanup важнее впечатления от промежуточного кадра и является обязательным условием валидности. PASS допустим, когда первый close завершает state closed, второй promise отклоняется и не создаёт ложный успешный teardown. Результат не усиливают словами о массовости; production, VPN, маршрутизация, чужие сайты и реальные media остаются вне опыта.

Stop-line, решение и минимальный handoff

В отчёт попадает не впечатление, а заранее определённый критерий PASS. Остановитесь, если создание context требует запрещённого user gesture, страница уходит в background или wrapper проглатывает rejection. Финальная запись хранит машина teardown «state → close #1 → settled → close #2 → rejection», результат контроля, отметку rollback и ссылку на 318522@main. Финальный статус не бинарный: отдельно различаются воспроизведение, отсутствие воспроизведения, отсутствие поддержки, блок среды, невалидность и нехватка данных. Handoff должен позволять повтор без исходных данных пользователя: одна страница/extension fixture, измерения, control, cleanup и точная ссылка на изменение. PASS означает только условие «первый close завершает state closed, второй promise отклоняется и не создаёт ложный успешный teardown». Материал не обещает индексацию, позиции, поисковый спрос, stable-поддержку или автоматическое исправление.

Материал подготовлен редакцией VOne с помощью ИИ; дата, WebKit Release 251, primary commit 318522@main, техническая граница, независимый контроль, обратимость, privacy-stop и роль community lead постатейно проверены 29 августа 2026 года.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.