Я пытаюсь написать скрипт контента, который выполняется на странице YouTube, ждет готовности видеопроигрывателя и меняет качество воспроизведения на заданное значение по умолчанию.
Чтобы узнать, когдапроигрыватель готов. Я выполняю эту функцию каждые 25 мсек:
function changePlayerQuality(){
var playerReadyInterval=window.setInterval(function(){
var player=document.getElementById("movie_player");
if(checkPlayerReady(player)){
console.log("player ready");
window.clearInterval(playerReadyInterval);
player.setPlaybackQualityRange(defaultQuality,defaultQuality);
}
},25);
}
checkPlayerReady
написано следующим образом и использует функцию getPlayerState
API Youtube:
function checkPlayerReady(player) {
console.log(player);
if(typeof player.getPlayerState === "function") console.log("exists")
else console.log("does not exist");
try{
if (player.getPlayerState() !=-1) return true;
else return false;
}
catch(e){
return false;
}
}
Прямо сейчасК сожалению, этот интервал постоянно зацикливается, поскольку функция getPlayerState
не существует (консоль регистрирует «не существует» несколько раз).
Мне кажется странным, что player node changePlayerQuality
Журналы на его 4-й строке имеют функцию getPlayerState
.Если я щелкну на нем правой кнопкой мыши, использую «stock в качестве глобальной переменной», я действительно могу вызвать функцию getPlayerState
.Точно так же, как если бы у узла было другое (более старое?) Состояние в моем скрипте контента и в других местах.
Ожидаемый результат будет для checkPlayerReady
, чтобы возвратить true в одной точке и для changePlayerQuality
, чтобы изменить YouTubeКачество воспроизведения видео.
Это моя первая попытка сделать расширение Firefox, поэтому я могу упустить что-то действительно простое.