Arrow Key Pager

Press E for next page, Q for previous page

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Advertisement:

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

Advertisement:

// ==UserScript==
// @name         Arrow Key Pager
// @namespace    http://tampermonkey.net/
// @version      2.2
// @description  Press E for next page, Q for previous page
// @match        *://*/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {

  function findLink(dir) {
    // Bilibili
    const bTxt = dir === 'next' ? '下一页' : '上一页';
    const bBtn = Array.from(document.querySelectorAll('button.vui_pagenation--btn-side')).find(b => b.textContent.trim() === bTxt);
    if (bBtn) return bBtn;

    // Google
    if (dir === 'next') {
      const el = document.querySelector('#pnnext, a[aria-label="Next page"]');
      if (el) return el;
      const links = document.querySelectorAll('a[href*="start="]');
      if (links.length) return links[links.length - 1];
    } else {
      const el = document.querySelector('#pnprev, a[aria-label="Previous page"]');
      if (el) return el;
    }

    // rule34video
    const svg = document.querySelector(`svg.custom-${dir === 'next' ? 'right' : 'left'}`);
    if (svg) return svg.closest('a');

    return null;
  }

  document.addEventListener('keydown', (e) => {
    const tag = document.activeElement?.tagName;
    if (['INPUT', 'TEXTAREA', 'SELECT'].includes(tag) || document.activeElement?.isContentEditable) return;
    if (!['KeyE', 'KeyQ'].includes(e.code)) return;

    const el = findLink(e.code === 'KeyE' ? 'next' : 'prev');
    if (el) { e.preventDefault(); el.click(); }
  });

})();