nicovideo-next-video-canceler

ニコニコ動画の連続再生オフ機能を、公式より少し便利にします(プレイリストは普通に連続再生、動画終了時に全画面を自動解除)。※公式のプレイヤー設定の「次の動画を自動再生」はONのままにしてください。「nicovideo-autoplay-canceler」「nicovideo-player-expander」は別のスクリプトです。

  1. // ==UserScript==
  2. // @name nicovideo-next-video-canceler
  3. // @namespace https://github.com/dnek
  4. // @version 1.7
  5. // @author dnek
  6. // @description ニコニコ動画の連続再生オフ機能を、公式より少し便利にします(プレイリストは普通に連続再生、動画終了時に全画面を自動解除)。※公式のプレイヤー設定の「次の動画を自動再生」はONのままにしてください。「nicovideo-autoplay-canceler」「nicovideo-player-expander」は別のスクリプトです。
  7. // @description:ja ニコニコ動画の連続再生オフ機能を、公式より少し便利にします(プレイリストは普通に連続再生、動画終了時に全画面を自動解除)。※公式のプレイヤー設定の「次の動画を自動再生」はONのままにしてください。「nicovideo-autoplay-canceler」「nicovideo-player-expander」は別のスクリプトです。
  8. // @homepageURL https://github.com/dnek/nicovideo-next-video-canceler
  9. // @match https://www.nicovideo.jp/watch/*
  10. // @grant none
  11. // @license MIT license
  12. // ==/UserScript==
  13.  
  14. (function () {
  15. 'use strict';
  16.  
  17. const observer = new MutationObserver((mutationList, observer) => {
  18. mutationList.filter(mutation => mutation.type === 'childList').forEach(mutation => {
  19. for (const node of mutation.addedNodes) {
  20. if (
  21. node.nodeType === 1 &&
  22. node.tagName === 'DIV' &&
  23. node.innerHTML.includes('data-element-name="next_video_confirmation_cancel"')
  24. ) {
  25. const buttonEl = node.querySelector('button[data-element-name="next_video_confirmation_cancel"]');
  26. if (buttonEl !== null) {
  27. buttonEl.click();
  28. console.log('next video cancel button clicked.');
  29. if (document.fullscreenElement !== null) {
  30. document.exitFullscreen()
  31. .then(() => {
  32. console.log('exited from full screen.');
  33. })
  34. } else {
  35. const browserFullButtonEl = document.querySelector('button[aria-label="ブラウザ内最大化解除(b)"]');
  36. if (browserFullButtonEl !== null) {
  37. browserFullButtonEl.click();
  38. console.log('browserfull exit button clicked.');
  39. }
  40. }
  41. }
  42. }
  43. }
  44. });
  45. });
  46. const options = {
  47. childList: true,
  48. subtree: true,
  49. };
  50. observer.observe(document.body, options);
  51. })();