После нескольких часов отладки я нашел виновника. Похоже, что это был действительно частичный тест на развертывание / AB с Facebook.
Точнее, это был флаг с именем disableDuplicatePlayingRequest от VideoPlayerExperiment, который загружается в исходный код страницы вашего профиля. Если для него установлено значение, true
необходимо приостановить воспроизведение видео перед сменой времени, иначе оно будет зависать / зависать.
Что касается решения, то здесь нет простого. Похоже, он используется в замыканиях, поэтому нет простого способа его изменить. По крайней мере из того, что я видел / тестировал.
Единственный способ, которым я смог обойти это, - это заменить https://www.facebook.com/rsrc.php/v3iTQQ4/yd/l/fb_LT/JTeC8QI2Wlf.js
( позже редактировать : имя / местоположение скрипта часто меняются, я добавил учебник, чтобы найти правильный) скрипт из Facebook и загрузить с его помощью настроенную версию скрипта. расширения, которое обходит проверку из файла:if (c('VideoPlayerExperiments').disableDuplicatePlayingRequest && this.isState('playing')) return;
Если кто-то заинтересован в расширении, оно называется Resource Override, но его не так просто использовать. Вам нужен сервер для размещения измененного файла js и несколько правил заголовка для обхода CORS и CSP.
PS Я создал вопрос сообщества здесь, чтобы получить ответы от Facebook. Любой может помочь, проголосовав (или на мобильный телефон) вопрос.
PS2: Хорошо, поэтому, чтобы действительно решить эту проблему, вам нужно использовать Chrome и выполнить следующие шаги:
Зайдите на FB и войдите. Найдите во всех источниках js флаг disableDuplicatePlayingRequest . Если вы не знаете, как это сделать, вы можете использовать этот учебник
После того, как вы нашли файл, который содержит его, используйте
{}
кнопку (Pretty Print), а затем скопируйте все содержимое из файла в текстовый редактор. Перейти к строке, которая имеет что-то вродеif (c('VideoPlayerExperiments').disableDuplicatePlayingRequest && this.isState('playing')) return;
и удалить или прокомментировать это. Теперь вам нужно сохранить этот файл и загрузить его на сервер. Я не могу поделиться своим файлом, так как FB может посчитать это нарушением условий, поэтому вам придется сделать это самостоятельно. Запомните публичный доступ к файлу.Установите расширение переопределения ресурсов из хранилища Chrome
Откройте параметры расширения. Во вкладке URL введите
*facebook.com*
Добавьте правило изменения заголовков. Во
For:
входеhttps://www.facebook.com*
. Теперь иди вEdit headers
. Мы будем работать только с заголовками ответов, поэтому обязательно используйте только второй раздел. Добавьте 2 установленных правила заголовка дляContent-Security-Policy
иX-Content-Security-Policy
. Теперь нам нужно добавить ваш сервер в существующую политику, которую использует FB. Для этого вернитесь на страницу facebook и перейдите на вкладку Dev Console> Network. Выберите один из запросов файла .js. В заголовках ответов вы увидитеcontent-security-policy
. Скопируйте все это после:
текстового редактора. Это должно начаться сdefault-src...
. Теперь найдитеblob:;script-src
и добавьте домен, который вы используете для размещения вашего файла js. Напримерxyz.com
или*.xyz.com
(если вы используете поддомен). Обязательно оставляйте пробелы до и после него, чтобы он не влиял на существующую строку политик. Теперь используйте эту новую строку и поместите ее в 2 поля значения из набора полей заголовка из расширения. Они оба должны быть идентичны. Теперь нам нужно еще одно заданное правило заголовкаAccess-Control-Allow-Origin
со значением*
. Нажмите на близко, чтобы вернуться в главное меню.Добавьте еще одно правило изменения заголовков. На этот раз мы будем использовать его для вашего домена, чтобы убедиться, что у вас там тоже есть нужные заголовки. В
For:
поле введите точную ссылку, чтобы ваш измененный файл был доступен в сети. Предпочтительный https. Использование http или локального файла может вызвать проблемы. Теперь перейдите в раздел изменения заголовков правила. Мы также будем использовать здесь раздел ответов. В настройках обязательно выберитеAllow outside content
опцию, чтобы она автоматически добавила 2 правила для вас. После этих 2 нам нужно еще одно правило заголовка setAccess-Control-Allow-Origin
со значениемhttps://www.facebook.com
. Не нажимайте кнопку «Закрыть» и возвращайтесь в главное меню.Последний шаг - фактически заменить файл FB js вашим измененным файлом. Для этого добавьте правило для URL -> URL. В
From:
добавить файл из стадии (1). В качестве дополнительного примечания, эта ссылка будет периодически меняться, потому что Facebook имеет тенденцию обновлять ее каждые 1-3 дня. Вам также необходимо изменить его, когда вы заметите, что видео снова начнет зависать. Вы можете следовать шагу (1), чтобы получить новую ссылку для него. Теперь вTo:
поле нужно поставить ссылку на измененный файл. И последнее, что нужно проверить, чтобы все эти 3 правила были установленыON
. Вот и все, видео должно работать снова, как раньше.
PS3: Вы можете найти сохраненные правила расширения здесь . Вам нужно заменить имена xyz.co
и https://xyz.co/modified.js
имена своими. Каждый из них появляется 2 раза. После этого убедитесь, что ссылка на файл, который содержит, disableDuplicatePlayingRequest
является правильной.