Происходит ли событие браузера при изменении стиля полосы прокрутки OS X?
OS X Lion и выше позволяют пользователю включать/выключать плавающие полосы прокрутки в стиле iOS - либо вручную с помощью системных настроек, либо путем подключения мыши.
Браузеры, основанные на WebKit (и, возможно, Opera?) сразу же меняют свой стиль полосы прокрутки - Есть ли событие, которое срабатывает, когда это происходит? (только для WebKit)
Некоторые примечания:
-
OS X запускает NSPreferredScrollerStyleDidChangeNotification
, когда пользователь переключает свой стиль полосы прокрутки
-
WebKit не подписывается на это событие (без хитов для него).
-
Я подозреваю, что WebKit обрабатывает это через событие NSViewBoundsDidChangeNotification
(которое, я полагаю, срабатывает для просмотра содержимого прокрутки).
-
WebKit обрабатывает это событие внутри -[WebHTMLView _frameOrBoundsChanged]
, которое кажется одной потенциальной точкой повторной компоновки.
-
Есть также ссылки на это уведомление в WebPDFView
, а инспектор WebNodeHighlight
- оба они не связаны с этим случаем.
-
-[WebDynamicScrollBarsView adjustForScrollOriginChange]
, похоже, указывает на то, что события могут быть не запущены (если это так, было бы неплохо увидеть некоторое подтверждение )
Опрос изменений не является приемлемым для меня ответом (производительность и макет, прыгающий после изменения пользователем значения).
Ответы
Ответ 1
Из всего, что я читал до сих пор, во время этого перехода стиля нет события DOM.
Наиболее убедительным примером является создание div overflow: auto
, а затем запись всех его событий (в Safari или Chrome) с помощью monitorEvents
. При изменении стиля полосы прокрутки ничего не записывается.
У меня есть открытая ошибка веб-кита по этой проблеме (хотя она, вероятно, недостаточно мала, что мы не увидим никаких движений на ней).