YouTube - не показывать контекстное меню по правому клику - PullRequest
0 голосов
/ 07 декабря 2018

Идея: искать видео на YouTube, перетаскивая видео проигрыватель правой кнопкой (например, 1 секунда на каждые 2% ширины экрана).Так что на экране 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)
}
...