在Netflix网站上观看Netflix视频时,我的目标是让用户脚本以编程方式调用播放控件。具体来说,视频的音量,级别,播放/暂停状态和时间位置。使用Tampermonkey控制Netflix(HTML5)播放/ javascript
我已经能够操纵html5视频元素本身,但直接控制它并不能提供所需的netflix控制条反馈给用户。 (即视频暂停,但控制栏仍显示为播放)。
到目前为止,我的方法是尝试找到代表使用常规控件时单击的“按钮”的元素,并通过userscript触发其点击事件。但我似乎无法孤立适当的元素。此外,netflix正在使用JavaScript压缩器/混淆器,这增加了查找代表控制栏上按钮的适当元素的难度。
在这样的网站上,如何识别接收元素的点击事件的元素,然后通过tampermonkey和/或greasemonkey创建一个userscript来调用它?
在下面的示例代码中,为了测试目的,我在视图上添加了一个按钮。
// ==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播放器控制,请参阅http://stackoverflow.com/q/6086205/32453 – rogerdpack
截至9月2017年。这是唯一可行的答案。 https://stackoverflow.com/questions/42105028/netflix-video-player-in-chrome-how-to-seek/46816934#46816934 –