Имитация нажатия / изменения значения ползунка арии (netflix) программно
Я пытаюсь управлять плеером Netflix из расширения Google Chrome. Вот изображение панели управления для тех, кто не знаком с ней.
Мне удалось смоделировать нажатие кнопки воспроизведения / паузы, следующего эпизода и переключения полноэкранных кнопок (с оранжевым квадратом) с помощью следующего кода:
$(".[control class]").click();
Но та же самая логика, кажется, не применима к ползунку, который контролирует, в какой части видео вы находитесь (та, что внутри синего прямоугольника).
Я хочу изменить текущую позицию видео (например, вернуться назад на 10 секунд). Вот что я пробовал до сих пор:
Изменить aria-valuenow на section role="slider"
:
$(".player-slider")["aria-valuenow"] = 0;
Получите красный круг, измените его положение и нажмите на него:
$(".player-scrubber-target")["style"] = "width: 30%";
$(".player-scrubber-target").click();
(Отчаянно) Измените ширину и / или нажмите на каждый бар внутри раздела:
.player-scrubber-progress-buffered (change width and click)
.player-scrubber-progress-completed (change width and click)
.player-scrubber-progress (click)
#scrubber-component (click)
@РЕДАКТИРОВАТЬ
Большое спасибо Kodos Johnson за то, что он указал мне на этот вопрос, и kb0 за оригинальный код, благодаря небольшому исследованию, я могу изменить громкость и положение плеера из консоли Chrome Developer Tools. Вот код (измените [VOLUME] для желаемого объема 0~99 и [POSITION] для желаемой позиции):
// Change volume
netflix.cadmium.UiEvents.events.resize[0].scope.events.dragend[0].handler(null, {pointerEventData: {drag: {current: {value: [VOLUME]}}}});
// Change player position
netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null, {value: [POSITION], pointerEventData: {playing: false}});
К сожалению, похоже, что это не работает за пределами Chrome Developer Tools. Когда я запускаю фрагменты из моего расширения, я получаю это:
Uncaught ReferenceError: netflix is not defined at <anonymous>:1:1
Вот как я запускаю скрипт из моего расширения:
chrome.tabs.getSelected(null, function(tab){
chrome.tabs.executeScript(tab.id, {code: [SNIPPET]}, function(response) {});
});
Вопрос:
Как я могу программно изменить текущую позицию видео (или симулировать, что пользователь нажал на панель и изменил ее вручную) из расширения Chrome?
1 ответ
Что ж, спасибо Kodos Johnson и Dehli за то, что они kb0 меня в правильном направлении, и kb0 за следующий фрагмент кода [...]
netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null, {value: 999, pointerEventData: {playing: false}});
[...] после небольшого исследования мне удалось получить доступ как к элементам управления громкостью, так и к позициям видео, и получить к ним доступ из консоли Chrome Developer Tools. Чтобы обойти тот факт, что мое расширение не было доступа к netflix
Вар, я ввожу код на странице <head>
,
Вот полный пример:
function ChangeVolume(volume)
{
InjectScriptOnPage("netflix.cadmium.UiEvents.events.resize[0].scope.events.dragend[0].handler(null, {pointerEventData: {drag: {current: {value: " + volume + "}}}});");
}
function ChangePosition(position)
{
InjectScriptOnPage("netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null, {value: " + position + ", pointerEventData: {playing: false}});");
}
function InjectScriptOnPage(script)
{
var script = "var head = document.getElementsByTagName('head')[0]; \
var script = document.createElement('script');\
script.type = 'text/javascript'; \
script.innerHTML = '" + script + "'; \
head.appendChild(script);";
ExecuteScriptOnPage(script);
}
function ExecuteScriptOnPage(script)
{
chrome.tabs.getSelected(null, function(tab){
chrome.tabs.executeScript(tab.id, {code: script}, function(response) {});
});
}
(Я подожду до конца щедрости, чтобы пометить это как принятое, в случае, если кто-то отправит лучший ответ)