После нескольких часов отладки я нашел виновника. Похоже, что это был действительно частичный тест на развертывание /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 нам нужно еще одно правило заголовка set для Access-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
, верна.