您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds Google Translate audio to all the sentences that do not yet have audio.
// ==UserScript== // @name Bunpro: Example Sentence Audio // @namespace http://tampermonkey.net/ // @version 0.1.7 // @description Adds Google Translate audio to all the sentences that do not yet have audio. // @author Kumirei // @include *bunpro.jp/* // @exclude *community.bunpro.jp* // @require https://greasyfork.org/scripts/432418-wait-for-selector/code/Wait%20For%20Selector.js?version=974366 // @grant none // ==/UserScript== (function($, wfs) { // Need to remove the referrer; otherwise returns 404s var remRef = document.createElement('meta'); remRef.name = 'referrer'; remRef.content = 'same-origin'; document.querySelector('head').append(remRef); // CSS stuff $('head').append('<style>audio.TTS {margin-top: 6px; border: 1px solid white !important; border-radius: 28px !important;}</style>'); // The player element var first = "<div class=\"audio-holder\">" + " <audio class=TTS controls >" + " <source src=\"https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q="; var last = " &tl=ja&total=1&idx=0?\" type=\"audio/mpeg\">" + " </audio>" + "</div>"; // Detect context sentences wfs.wait('.japanese-example-sentence', function(e) { // Do nothing if there is already audio provided if (e[0].nextElementSibling.className != "audio-holder" || e[0].nextElementSibling.innerText.includes('coming soon')) { // Get sentence in plain text and add the player var sentence = parseSentence(e[0]); e.after(first + sentence + last); } }); // Extract the sentence from the element function parseSentence(sentenceElem) { var sentence = ""; sentenceElem.childNodes.forEach(function(elem) { // find the text in each kind of element and append it to the sentence string var name = elem.nodeName; if (name == "#text") { sentence += elem.data; } else if (name == "STRONG" || name == "SPAN") { if (name == "STRONG" && elem.children.length) { sentence += elem.children[0].childNodes[0].data; // with kanji in url //sentence += elem.children[0].children[1].innerText; // with kana in url } else { sentence += elem.innerText; } } else if (name == "RUBY") { sentence += elem.childNodes[0].data; // with kanji in url //sentence += elem.children[1].innerText; // with kana in url } }); return sentence; } })(window.jQuery, window.wfs);