您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds download audio button to Jisho.org pages which downloads word audio clips.
// ==UserScript== // @name Jisho Audio Downloader // @namespace http://miere.ru/ // @version 0.1 // @description Adds download audio button to Jisho.org pages which downloads word audio clips. // @author Vladislav <miere> Vorobiev // @match http://jisho.org/search/* // @match http://jisho.org/word/* // @grant none // ==/UserScript== (function() { 'use strict'; function getWordNameFromAudioID(audioID) { if (!audioID || audioID.length < 7) return "unknown"; var result = ""; for (var i = 6; i < audioID.length && audioID[i] !== ':'; ++i) { result = result + audioID[i]; } return result; } function getFileExtension(file) { if (!file || file.length === 0) return ""; var extension = []; var seperatorFound = false; for (var i = file.length - 1; i > 0; --i) { if (file[i] === '.') { extension.add(file[i]); extension.reverse(); break; } else { extension.add(file[i]); } } return extension.join(''); } function insertNodeAfter(insertNode, afterNode) { afterNode.parentNode.insertBefore(insertNode, afterNode.nextSibling); } function downloadFileWithFileName(url, fileName) { var URL = window.URL || window.webkitURL; var xhr = new XMLHttpRequest(), a = document.createElement('a'), file; xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.onerror = function() { a.href = url; a.download = fileName; a.click(); }; xhr.onload = function() { file = new Blob([xhr.response], { type : 'application/octet-stream' }); a.href = URL.createObjectURL(file); a.download = fileName; a.click(); }; xhr.send(); } var audioElements = document.getElementsByTagName('audio'); for (var i = 0; i < audioElements.length; ++i) { var audioElement = audioElements[i]; var audioID = audioElement.id; var audioLinkElement = audioElement.nextElementSibling; if (!audioLinkElement || !audioLinkElement.dataset || audioLinkElement.dataset.id != audioID) { continue; // @TODO: Site layout has changed, skip this or show alert? } var downloadAudioElement = document.createElement('a'); downloadAudioElement.className = 'concept_light-status_link'; downloadAudioElement.dataset.href = audioElement.children[0].src; downloadAudioElement.dataset.download = getWordNameFromAudioID(audioID) + getFileExtension(downloadAudioElement.dataset.href); downloadAudioElement.innerText = 'Download audio'; downloadAudioElement.addEventListener('click', function(ev) { downloadFileWithFileName(ev.target.dataset.href, ev.target.dataset.download); }); insertNodeAfter(downloadAudioElement, audioLinkElement); } })();