AbemaTV Shortcut Key Controller

AbemaTVでショートカットキーによる操作を可能にします。キーアサインはYouTube準拠。

当前为 2017-08-10 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        AbemaTV Shortcut Key Controller
// @namespace   knoa.jp
// @description AbemaTVでショートカットキーによる操作を可能にします。キーアサインはYouTube準拠。
// @include     https://abema.tv/*
// @version     1
// @grant       none
// ==/UserScript==

(function(){
  const SCRIPTNAME = 'ShortcutKeyController';
  const DEBUG = false;
  if(window === top) console.time(SCRIPTNAME);
  let core = {
    initialize: function(){
      document.addEventListener('keydown', function (e) {
        switch(true){
          case(location.href.startsWith('https://abema.tv/now-on-air/')):
            return core.realtime(e);
          case(location.href.startsWith('https://abema.tv/channels/')):
          case(location.href.startsWith('https://abema.tv/video/watch/')):
            return core.timeshift(e);
        }
      }, true);
    },
    /* リアルタイム */
    realtime: function(e){
      switch(true){
        /* テキスト入力中は反応しない */
        case(document.activeElement.tagName == 'INPUT'):
        case(document.activeElement.tagName == 'TEXTAREA'):
          break;
        /* コメント入力欄フォーカス */
        case(e.key == 'k'):
        case(e.key == ' '):
        case(e.key == 'Enter'):
          /* コメント欄が表示されていなければあらかじめ表示しておく */
          if(document.querySelector('div[class*="styles__right-slide--shown___"]') == null){
            document.querySelector('div[class*="styles__right-container___"] button[class*="style__container___"]').click();
          }
          document.querySelector('textarea[class*="styles__opened-textarea___"]').focus();
          e.preventDefault();
          break;
        /* コメント */
        case(e.key == 'c'):
          if(document.querySelector('div[class*="styles__right-slide--shown___"]') == null){
            document.querySelector('div[class*="styles__right-container___"] button[class*="style__container___"]').click();
          }else{
            document.querySelector('div[class*="style__overlap___"]').click();
          }
          e.preventDefault();
          break;
        /* フルスクリーン */
        case(e.key == 'f'):
          /* どちらか一方のボタンしか同時に存在しない */
          document.querySelector('button[aria-label="フルスクリーン表示"]').click();
          document.querySelector('button[aria-label="フルスクリーン解除"]').click();
          e.preventDefault();
          break;
        /* ミュート */
        case(e.key == 'm'):
          document.querySelector('button[aria-label="音声オンオフ切り替え"]').click();
          e.preventDefault();
          break;
      }
    },
    /* タイムシフト */
    timeshift: function(e){
      switch(true){
        /* テキスト入力中は反応しない */
        case(document.activeElement.tagName == 'INPUT'):
        case(document.activeElement.tagName == 'TEXTAREA'):
          break;
        /* 再生・停止トグル */
        case(e.key == 'k'):
        case(e.key == ' '):
        case(e.key == 'Enter'):
          document.querySelector('div[class*="styles__play-handle___"]').click();
          e.preventDefault();
          break;
        /* 10秒戻る */
        case(e.key == 'j'):
        case(e.key == 'ArrowLeft'):
          document.querySelector('div[class*="styles__rewind-10___"]').click();
          e.preventDefault();
          break;
        /* 10秒進む */
        case(e.key == 'l'):
        case(e.key == 'ArrowRight'):
          document.querySelector('div[class*="styles__advances-10___"]').click();
          e.preventDefault();
          break;
        /* フルスクリーン */
        case(e.key == 'f'):
          document.querySelector('div[class*="styles__screen-controler___"]').click();
          e.preventDefault();
          break;
        /* ミュート */
        case(e.key == 'm'):
          document.querySelector('button[aria-label="音声オンオフ切り替え"]').click();
          e.preventDefault();
          break;
      }
    }
  };
  let log = (DEBUG) ? console.log.bind(null, SCRIPTNAME + ':') : function(){};
  core.initialize();
  if(window === top) console.timeEnd(SCRIPTNAME);
})();