想法:通过在视频播放器上用右键拖放来寻找 YouTube 视频(例如,每 2% 的屏幕宽度需要 1 秒)。所以在一个 1920x1080 的屏幕上,如果我按下鼠标右键,向左拖动 384 像素(20%)然后松开,视频应该快退 10 秒。
我有一个 GreaseMonkey 脚本,它几乎可以满足我的需求,但是当我释放按钮时,上下文菜单仍然会弹出。这不是默认的上下文菜单,而是 YouTube 的自定义上下文菜单,它可能以某种方式绑定到 mouseup 事件。我想摆脱这个菜单,我也想阻止默认上下文菜单打开。
有没有办法可以更改鼠标事件的默认操作?我想保留所有其他操作(左键单击、键盘操作等)。我还没有找到一种方法来删除特定事件的元素上的事件处理程序。
if (window.top === window.self) {
// YT video cannot be manipulated from the scope in which GM is running
// so we add a <script> element in the document to make it work
addJsNode(installListeners)
}
function installListeners() {
const FACTOR = screen.width / 70
const mp = document.getElementById('movie_player')
let startpos
mp.onmousedown = (e) => {
// only using FF so cross-browser compatibility is not required
if (e.button == 2) { startpos = e.clientX }
}
mp.onmouseup = (e) => {
if (e.button == 2) {
//===> somehow prevent YT from displaying context menu
const diff = e.clientX - startpos
mp.seekBy(diff / FACTOR)
}
}
}
function addJsNode(func) {
var scriptNode = document.createElement('script')
scriptNode.type = 'text/javascript'
scriptNode.textContent = '('+func.toString()+')()'
var target = document.getElementsByTagName ('head')[0] ||
document.body || document.documentElement
target.appendChild(scriptNode)
}