我想制作一个Chrome扩展程序,在其中提供一个新对象window
.当在加载了扩展名的浏览器中查看网页时,我希望window.mything
通过Javascript提供.该window.mything
对象将具有我将在扩展中定义的一些函数,并且console.log
当在启用了扩展的浏览器中查看页面时,这些函数应该可以从任何Javascript文件调用.
我能够使用内容脚本成功地将Javascript文件注入页面:
var s = document.createElement("script");
s.src = chrome.extension.getURL("mything.js");
document.getElementsByTagName("head")[0].appendChild(s);
Run Code Online (Sandbox Code Playgroud)
mything.js看起来像这样:
window.mything = {thing: true};
console.log(window);
Run Code Online (Sandbox Code Playgroud)
每当页面加载时,我都会看到整个window
对象,因为我希望它在控制台中.但是,我无法window.mything
从控制台与对象进行交互.似乎注入的脚本没有真正修改全局window
对象.
如何window
从Chrome扩展程序修改全局对象?
我有一个Netflix帐户,我在谷歌浏览器内运行的视频播放器中偷看了它.Netflix将其视频播放器称为"镉",javascript会显示您可能期望的所有功能和事件处理程序,例如播放,停止,暂停,静音等.我正在构建一个小的Chrome扩展程序,可以让我称这些镉玩家功能,但对我来说困难的部分是弄清楚如何创建一个播放器的实例,这样我才能开始通话.javascript很大,很复杂,而且有点模糊.一旦我可以创建该播放器的实例,我认为调用函数将很容易.
这是一个相关的js块:
muteOn: function() {
this.savedVolume = this.getVolume(),
this.updateVolumeDisplay(0),
this.scrubber.updatePercent(0),
this.muted = !0,
this.videoPlayer.setMuted(this.muted)
}
Run Code Online (Sandbox Code Playgroud)
在Chrome开发工具中,我可以在该块中设置一个断点,当我点击netflix视频播放器上的静音按钮时执行会遇到断点.Netflix js(毫不奇怪)通过方法重命名严重混淆.我尝试逐步调试调试器中的代码并结束了一百个兔子洞,从来没有找到我的方式到堆栈的顶部,这样我就可以进行相同的调用(在堆栈顶部)来模拟用户点击静音按钮.我还尝试了以编程方式点击UI播放器上的静音按钮的方法,这同样可以很好地满足我的需求,但是他们在那里有严格的防御机制,让我像一个顶部.
由于有超过100K的javascript行,并且我不确定哪个块与这篇文章完全相关,我建议您在Chrome中加载Netflix,打开开发工具,播放电影,并检查暂停或静音按钮.与这些视频播放器控件进行交互会带您进入javascript的迷宫,我正试图看看如何以编程方式控制播放器的各个方面(仅从开发工具中就可以了).我需要弄清楚的另一个重要事项是如何查询视频播放器以确定播放视频的当前经过时间.
我有什么想法可以破解这个坚果?(提前致谢!)
我正试图通过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]}, …
Run Code Online (Sandbox Code Playgroud) 在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) {
/*--- …
Run Code Online (Sandbox Code Playgroud) 我正在创建同步网络扩展,我想修改视频的当前时间。所以我检测到了<video>
并且我这样做是为了更改时间代码:
video.currentTime=5;
但 netflix 自动在屏幕上显示错误: https://prnt.sc/sm0ro9和 https://prnt.sc/sm0sev
我遇到了同样的错误this.video.currentTime=5;
我知道 video.currenttime 正在工作,因为在屏幕 1 中我们可以看到 Netflix 向我发送了准确的时间码。
有人知道如何编辑时间码吗?
javascript ×5
netflix ×4
jquery ×2
greasemonkey ×1
html ×1
html5-video ×1
tampermonkey ×1
wai-aria ×1