您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds audio to words and sentences on vocabulary. Works with Firefox and works with Chrome if referrers are disabled
// ==UserScript== // @name Jisho Audio // @namespace https://github.com/deelawn/user-scripts // @version 0.1 // @description Adds audio to words and sentences on vocabulary. Works with Firefox and works with Chrome if referrers are disabled // @author deelawn // @include /^http(s?)://((www\.)?)jisho\.org/(search|word|sentences)/(.+)$/ // @grant none // @require http://code.jquery.com/jquery-latest.js // ==/UserScript== (function() { 'use strict'; var audioLinkPartOne = "<a href=\"#\" class=\"concept_audio concept_light-status_link\" onclick=\"var audio = document.createElement('audio'); audio.src='https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q="; var audioLinkPartTwo = "&tl=ja&total=1&idx=0'; audio.type='audio/mpeg'; audio.play();\">Play audio</a>"; function processWord(wrapper, sourceObj){ // Do nothing if audio provided by Jisho if ($(wrapper + " > div[class*='concept_light-status'] > audio", sourceObj).length){ return; } // Get the text to be used in the audio source link var jpText = $(wrapper + " > div[class*='concept_light-readings'] > div > span[class='text']", sourceObj).text().trim(); var insertLinkSel = wrapper + " > div[class*='concept_light-status']"; // Some katakana words are structured differently if($(" > div[class*='concept_light-status']", sourceObj).length){ insertLinkSel = " > div[class*='concept_light-status']"; } // Insert the play audio link before the first non-span element under the word $(insertLinkSel, sourceObj).children().each(function(){ if(!($(this).is("span"))){ $(this).before(audioLinkPartOne + jpText + audioLinkPartTwo); return false; } }); } function processSentence(sourceObj){ // Build the japanese sentence var jpText = ""; $(" > div[class='sentence_content'] > ul", sourceObj).children().each(function(){ jpText += $(" > span[class='unlinked']", this).text().trim(); }); // Insert link after the sentence block $(" > div[class='sentence_content'] > div[class*='english_sentence']", sourceObj).after(audioLinkPartOne + jpText + audioLinkPartTwo); } $(document).ready(function() { // Need to remove the referrer; otherwise returns 404s var remRef = document.createElement('meta'); remRef.name = 'referrer'; remRef.content = 'no-referrer'; document.querySelector('head').append(remRef); var wordsIdentifier = "div[id='primary']"; var sentencesIdentifier = "div[id='secondary'] > div[class='sentences_block'] > ul"; var detailWordIdentifier = "article[class*='concept_page'] > div[class*='concept_light']"; var detailSentenceIdentifier = "article[class*='sentences'] > li"; // Process words search results if ($(wordsIdentifier).length){ // Children of the primary div are two divs: words and concepts $(wordsIdentifier).children().each(function(){ $(this).children().each(function(){ // First child will be h4, so skip if ($(this).is("h4")){ return; } var wrapper = "div[class*='concept_light-wrapper']"; processWord(wrapper, this); }); }); } // Process sentences search results if($(sentencesIdentifier).length){ $(sentencesIdentifier).children().each(function(){ processSentence(this); }); } var url = window.location.href; // Process individual words // First check URL matches and that content exists var regEx = /^http(s?):\/\/((www\.)?)jisho\.org\/word\/(.+)$/; if($(detailWordIdentifier).length && regEx.test(url)){ var wrapper = detailWordIdentifier + " > div[class*='concept_light-wrapper']"; processWord(wrapper, this); } // Process individual sentences regEx = /^http(s?):\/\/((www\.)?)jisho\.org\/sentences\/(.+)$/; if($(detailSentenceIdentifier).length && regEx.test(url)){ processSentence($(detailSentenceIdentifier)); } }); })();