Как раз когда вы думаете, что искали здесь достаточно долго, чтобы оправдать вопрос, вы находите что-то действительно полезное.
Основываясь на ответе на этот вопрос , я обновил свойкод для этого:
function getVideo() {
var videos = document.getElementsByTagName("video");
if (videos.length >= 1) {
return [videos[0], "main"];
}
// Code that will run only inside iframe
if (parent === top) {
var videos = document.getElementsByTagName("video");
if (videos.length >= 1) {
return [videos[0], "iframe"];
}
}
return [null, null]; // if a video doesn't exist
}
И включил это в мой манифест, чтобы скрипт также вставлялся в iframe:
"content_scripts": [{
"all_frames": true,
...
...
}],
Это работает, но это делает мойдругие функции довольно безобразны. Пример:
// if a video exists, set it to the speed and give a notification
function setSpeed(newSpeed) {
var returnVal = getVideo();
var video = returnVal[0], type = returnVal[1];
if (video != null && type === "main") {
video.playbackRate = newSpeed;
inWindowAlert("Speed: " + newSpeed, 1000);
setIcon(newSpeed);
}
if (parent === top) {
if (video != null && type === "iframe") {
video.playbackRate = newSpeed;
inWindowAlert("Speed: " + newSpeed, 1000);
setIcon(newSpeed);
}
}
}
Я постараюсь найти более чистое решение, но пока оно работает. Надеюсь, это кому-нибудь поможет.