app*_*yip 9 javascript jquery netflix wai-aria
我正试图通过Google Chrome扩展程序控制Netflix的播放器.这是控制栏的图像,适用于那些不熟悉它的人.
我设法模拟点击播放/暂停,下一集并使用以下代码切换全屏按钮(橙色正方形):
$(".[control class]").click();
Run Code Online (Sandbox Code Playgroud)
但是同样的逻辑似乎并不适用于控制当前视频部分(蓝色矩形内部)的滑块.
我想要做的是改变视频的当前位置(例如,返回10秒).这是我到目前为止所尝试的:
更改aria-valuenow section role="slider":
$(".player-slider")["aria-valuenow"] = 0;
Run Code Online (Sandbox Code Playgroud)
检索红色圆圈,更改它的位置并单击它:
$(".player-scrubber-target")["style"] = "width: 30%";
$(".player-scrubber-target").click();
Run Code Online (Sandbox Code Playgroud)
(绝望)更改宽度和/或点击该部分内的每个栏:
.player-scrubber-progress-buffered (change width and click)
.player-scrubber-progress-completed (change width and click)
.player-scrubber-progress (click)
#scrubber-component (click)
Run Code Online (Sandbox Code Playgroud)
非常感谢Kodos Johnson指出了这个问题,并向kb0提供了原始代码,通过一些研究,我可以从Chrome开发者工具控制台更改音量和播放器位置.这是代码(更改所需音量0~99的[VOLUME]和所需位置的[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}});
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎不适用于Chrome开发者工具.当我从我的扩展程序运行代码片段时,我得到了这个:
Uncaught ReferenceError: netflix is not defined at <anonymous>:1:1
Run Code Online (Sandbox Code Playgroud)
这是我从我的扩展程序运行脚本的方式:
chrome.tabs.getSelected(null, function(tab){
chrome.tabs.executeScript(tab.id, {code: [SNIPPET]}, function(response) {});
});
Run Code Online (Sandbox Code Playgroud)
如何从Chrome扩展程序以编程方式更改视频的当前位置(或模拟用户点击栏并手动更改)?
好吧,感谢Kodos Johnson和Dehli为我指明了正确的方向,并感谢kb0提供了以下代码 [...]
netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null, {value: 999, pointerEventData: {playing: false}});
Run Code Online (Sandbox Code Playgroud)
[...] 经过一些研究,我设法访问音量和视频位置控件,并从 Chrome 开发人员工具的控制台访问它们。为了解决我的分机无权访问的事实netflixvar 的事实,我将代码注入到页面的<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) {});
});
}
Run Code Online (Sandbox Code Playgroud)
(我会等到赏金结束才将其标记为已接受,以防有人发布更好的答案)
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |