您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add audio file link of dictionary pages
- // ==UserScript==
- // @name Dictionary audio link revealer
- // @name:zh-TW 網路字典發音下載
- // @namespace https://github.com/solomonhuang/dictionary-audio-link-revealer
- // @version 0.20220112.0
- // @description Add audio file link of dictionary pages
- // @description:zh-TW 在網路字典的發音按鈕旁邊新增聲音檔下載。
- // @author Solomon Huang
- // @license MIT
- // @match https://dictionary.cambridge.org/*
- // @match https://tw.dictionary.search.yahoo.com/*
- // @match https://www.oxfordlearnersdictionaries.com/definition/*
- // @match https://www.dictionary.com/browse/*
- // @grant none
- // @supportURL https://github.com/solomonhuang/dictionary-audio-link-revealer/issues
- // ==/UserScript==
- (function() {
- 'use strict';
- var currentDict = location.hostname
- function createICON(fontSZ) {
- let icon = document.createElementNS('http://www.w3.org/2000/svg','svg')
- // SVG icon alighment style
- // Elliot Dahl ( https://twitter.com/Elliotdahl )
- // https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4
- icon.setAttribute('style','height:1em;width:1em;top: .125em;position: relative;display: inline-flex;align-self: center;')
- icon.setAttribute('width', '24')
- icon.setAttribute('height', '24')
- icon.setAttribute('stroke-width', '1.5')
- icon.setAttribute('stroke-width', '1.5')
- icon.setAttribute('viewBox', '0 0 24 24')
- icon.setAttribute('fill', 'none')
- let p3 = document.createElementNS('http://www.w3.org/2000/svg','path')
- p3.setAttribute('d', 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z')
- p3.setAttribute('stroke', 'green')
- p3.setAttribute('stroke-linecap', 'round')
- p3.setAttribute('stroke-linejoin', 'round')
- p3.setAttribute('fill', 'yellow')
- icon.appendChild(p3)
- let p1 = document.createElementNS('http://www.w3.org/2000/svg','path')
- p1.setAttribute('d', 'M9 17L15 17')
- p1.setAttribute('stroke', 'green')
- p1.setAttribute('stroke-linecap', 'round')
- p1.setAttribute('stroke-linejoin', 'round')
- icon.appendChild(p1)
- let p2 = document.createElementNS('http://www.w3.org/2000/svg','path')
- p2.setAttribute('d', 'M12 6V13M12 13L15.5 9.5M12 13L8.5 9.5')
- p2.setAttribute('stroke', 'green')
- p2.setAttribute('stroke-linecap', 'round')
- p2.setAttribute('stroke-linejoin', 'round')
- icon.appendChild(p2)
- return icon
- }
- function createLink(src) {
- let link = document.createElement('a')
- link.href = src
- link.style = 'text-decoration:none'
- return link
- }
- function appendICON(el, src) {
- let fontSZ = parseFloat(getComputedStyle(el).fontSize)
- let link = createLink(src)
- link.appendChild(createICON(fontSZ))
- el.append(link)
- }
- setTimeout(() => {
- /* all dictionary sites begin here */
- if (/dictionary\.cambridge\.org/.test(currentDict)) {
- let daud = document.querySelectorAll('.daud')
- for (var i = 0; i < daud.length; i++) {
- let a = daud[i].getElementsByTagName('audio')
- let src = a[0].children[0].src
- appendICON(daud[i].children[1], src)
- }
- }
- if (/tw\.dictionary\.search\.yahoo\.com/.test(currentDict)) {
- let dict_sound = document.querySelectorAll('.dict-sound')
- // TODO: fix with MutationObserver
- // https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
- for (let i = 0; i < dict_sound.length; i++) {
- let src = dict_sound[i].children[0].src
- appendICON(dict_sound[i].parentElement, src)
- }
- }
- if (/www\.oxfordlearnersdictionaries\.com/.test(currentDict)) {
- let icon_audio = document.querySelectorAll('.icon-audio')
- for (let i = 0; i < icon_audio.length; i++) {
- let src = icon_audio[i].attributes["data-src-mp3"].value
- appendICON(icon_audio[i].parentElement, src)
- }
- }
- if (/www\.dictionary\.com/.test(currentDict)) {
- let audio_wrapper = document.querySelectorAll('.audio-wrapper')
- for (let i = 0; i < audio_wrapper.length; i++) {
- let src = audio_wrapper[i].children[1].children[1].src
- appendICON(audio_wrapper[i], src)
- }
- }
- /* all dictionary sites end here */
- }, 500)
- })();