// ==UserScript== // @name Nico dl // @namespace http://tampermonkey.net/ // @version 0.1 // @description 下载N站视频 | Download video from nicovideo.jp // @author ctrn43062 // @include *//www.nicovideo.jp/watch/sm* // @icon https://www.google.com/s2/favicons?domain=nicovideo.jp // @grant none // @license MIT // @downloadURL none // ==/UserScript== const ITEM_KEY = 'DMCSource.isHLSDisabled'; const DOWNLOAD_SVG = `` function createDownloadButton() { const playbackRateButton = document.querySelector('.ActionButton.PlaybackRateButton'); const wrapper = playbackRateButton.parentElement; const downloadButton = document.createElement('button'); downloadButton.innerHTML = DOWNLOAD_SVG; downloadButton.className = 'ActionButton ControllerButton PlayerRepeatOnButton'; downloadButton.setAttribute('disabled', true); downloadButton.setAttribute('data-title', '下载视频'); wrapper.insertBefore(downloadButton, playbackRateButton); return { setSrc: function(src) { downloadButton.removeAttribute('disabled'); downloadButton.onclick = function() { window.open(src) }; }, disable: function() { downloadButton.setAttribute('disabled', true); } } } (function() { 'use strict'; const isHttp = localStorage.getItem(ITEM_KEY); if (isHttp === null || isHttp === 'false') { localStorage.setItem(ITEM_KEY, 'true'); location.reload(); } const downloadButton = createDownloadButton(); const observer = new MutationObserver(mutationsList => { for (let mutation of mutationsList) { const target = mutation.target; if (mutation.attributeName === 'src') { if (target.src) { downloadButton.setSrc(target.src); } else { downloadButton.disable(); } } } }); const video = document.querySelector('#MainVideoPlayer > video'); observer.observe(video, { attributes: true }); })();