【发布时间】:2015-03-11 18:02:33
【问题描述】:
在 Netflix 网站上观看 Netflix 视频时,我的目标是让用户脚本以编程方式调用播放控件。具体来说就是视频的音量、级别、播放/暂停状态、时间位置。
我已经能够操作 html5 视频元素本身,但直接控制它不会向用户提供所需的 netflix 控制栏反馈。 (即视频已暂停,但控制栏仍显示为正在播放)。
到目前为止,我的方法是尝试找到代表您在使用普通控件时单击的“按钮”的元素,并通过用户脚本触发它们的单击事件。但我似乎无法隔离正确的元素。此外,netflix 正在使用 javascript 压缩器/混淆器,这增加了在控制栏上找到代表按钮的适当元素的难度。
在这样的网站上,如何识别正在接收元素点击事件的元素,然后创建用户脚本以通过 tampermonkey 和/或greasemonkey 调用它?
在下面的示例代码中,我在视图上添加了一个按钮用于测试目的。
// ==UserScript==
// @name Jump a minute ahead in netflix
// @version 0.1
// @description A Test by trying to jump a minute or so ahead into a netflix movie
// @match *://www.netflix.com/*
// @grant GM_addStyle
// @require http://code.jquery.com/jquery-latest.js
// ==/UserScript==
var zNode = document.createElement ('div');
zNode.innerHTML = '<button id="myButton" type="button">Try It</button>';
zNode.setAttribute ('id', 'myContainer');
document.body.appendChild (zNode);
//--- Activate the newly added button.
document.getElementById ("myButton").addEventListener (
"click", ButtonClickAction, false
);
function ButtonClickAction (zEvent) {
/*--- For our dummy action, we'll just add a line of text to the top of the screen.*/
var zNode = document.createElement ('p');
var video = $("video:first-of-type");
var playerSlider = document.getElementsByClassName("player-slider")[0];
console.log(netflix);
console.log(playerSlider);
console.log(netflix.player);
console.log(netflix.cadmium);
console.log(netflix.cadmium.ui);
console.log(netflix.cadmium.ui.playback);
//video.get(0).pause();
//video.get(0).currentTime = 2000.0;
console.log(video.get(0).currentTime);
console.log(netflix.cadmium.ui.volume);
zNode.innerHTML = 'The button was clicked.';
document.getElementById ("myContainer").appendChild (zNode);
}
//--- Style our newly added elements using CSS.
GM_addStyle ( multilineStr ( function () {/*!
#myContainer {
position: absolute;
top: 0;
left: 0;
font-size: 20px;
background: orange;
border: 3px outset black;
margin: 5px;
opacity: 0.9;
z-index: 222;
padding: 5px 20px;
}
#myButton {
cursor: pointer;
}
#myContainer p {
color: red;
background: white;
}
*/} ) );
function multilineStr (dummyFunc) {
var str = dummyFunc.toString ();
str = str.replace (/^[^\/]+\/\*!?/, '') // Strip function () { /*!
.replace (/\s*\*\/\s*\}\s*$/, '') // Strip */ }
.replace (/\/\/.+$/gm, '') // Double-slash comments wreck CSS. Strip them.
;
return str;
}
console.log 语句显示了我目前发现的一些内容。但是我还没有弄清楚如何从它们中调用函数,或者它们中的哪些可能具有我正在寻找的东西(我认为主要是由于 javascript 压缩器使我难以遵循代码)。
【问题讨论】:
-
silverlight播放器控制见stackoverflow.com/q/6086205/32453
-
截至 2017 年 9 月。这是唯一有效的答案。 stackoverflow.com/questions/42105028/…
标签: javascript html5-video greasemonkey tampermonkey netflix