Подтвердить что ты не робот

Как определить, когда в данный момент активна функция блокировки Chrome в режиме "click-to-play"

Состояние отслеживания функции Chrome Click-to-play

Как вы обнаруживаете, что Flash-плагин временно отключен или, наоборот, обнаружил, что он был включен из-за функции Chrome "click-to-play"?

Фон

В Chrome новая функция "click-to-play" обнаруживает плагины, которые не имеют заметного значения и приостанавливают их. Chrome отображает кнопку "play" над плагином, пользователь может нажать кнопку "play", чтобы активировать плагин. (ссылка: https://productforums.google.com/forum/#!topic/chrome/xPcpRBzyPcc)

Здесь снимок экрана в действии (обратите внимание на белые кнопки воспроизведения): NFL.com Flash-плагин отключен по умолчанию

Вы можете видеть на этом снимке экрана, что он приостановил видеопроигрыватель (правая колонка). Этот видеопроигрыватель имеет элементы управления на основе HTML5, накладывающие видеоплеер на основе Flash. Таким образом, пользователю не нужно нажимать кнопку воспроизведения, так как весь SWF целиком покрывается элементами управления воспроизведением/паузой на основе HTML5.

Мне нужно определить, когда SWF был приостановлен функцией "щелчок для воспроизведения", поэтому я могу отключить элементы управления и сделать SWF интерактивным.

Что я пробовал

  • В JavaScript - все методы, открытые с помощью ExternalInterface, по-прежнему доступны, хотя SWF приостановлен. Он фактически реагирует так, как будто он играет, и не возвращает ошибку.
  • В JavaScript - обновите размер встроенного <object> до > 700x400px. "Click-to-play" не приостанавливает SWF этого размера. Итак, я попытался использовать -webkit-transfor: scale(0.5) для использования CSS, чтобы масштабировать его до нужного размера. Chrome вычисляет окончательный размер и приостанавливает SWF независимо.
  • В Flash - stage.frameRate возвращает правильное значение (оно не установлено на 0 для приостановки SWF, например)

При написании этого вопроса я нашел ответ, решил разместить здесь все равно, если другим нужна помощь в этом вопросе.

4b9b3361

Ответ 1

Чтобы обойти настройку Chrome для перехода к игре, загрузите SWF из того же домена и протокола, что и ваш сайт.


Вы можете использовать AS3 ThrottleEvent для обнаружения, когда SWF был дросселирован.

// AS3 code
import flash.events.ThrottleEvent;
import flash.external.ExternalInterface;

stage.addEventListener(ThrottleEvent.THROTTLE, onThrottleEvent);

private function onThrottleEvent(e:ThrottleEvent) {
    ExternalInterface.call("onThrottleEvent", e.state); // call javascript function 
}

Вы можете настроить вызов ExternalInterface, чтобы отслеживать это состояние в JavaScript, в JavaScript управлять z-index вашего SWF на основе, если он дросселирован или нет.

// JS Code
var IS_THROTTLED = false;

window.onThrottleEvent = function (throttleState) {
  IS_THROTTLED = (throttleState === "throttle");
}

Ответ 2

В интересах других, которые ищут правила вокруг Flash-блокировки, см. ниже:

  • Содержимое Flash и страница загружаются из одного домена.
    Неизвестная ширина и высота объекта Flash, т.е. Когда Chrome получает ширина и высота как 0 или меньше 0.
  • Содержимое Flash белого списка пользователей в настройках Chrome.
  • Ширина и высота Flash-объект меньше или равен 5, учитывая содержание должно быть маленьким и существенным.
  • Ширина и высота Объект Flash равен или больше 398x298.
  • Соотношение сторон содержимого составляет 16: 9 (с допустимым отклонением 0,01) и ширина * высота не менее 120K.

По крайней мере, один из вышеуказанных критериев должен быть удовлетворен, чтобы получить контент, помеченный как Essential, и не получить Auto-Paused. Хотя, я видел несколько отклонений, и Chrome еще не публиковал правила.

Ответ 3

Добавьте пустой файл Flash размером более 398x298 в нижней части страницы. Я обнаружил, что если у вас есть хотя бы один Flash файл выше их минимального Chrome, он не остановит ни одну из ваших Flash. Вы не можете скрыть этот дополнительный файл Flash с помощью CSS. При желании используйте тайм-аут javascript (3 секунды), чтобы скрыть пустой файл Flash, если он испортит ваш макет страницы. Я использую swfObject для встраивания.