您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Mouse Dictionary で引いた結果をAnkiwebのdeckに登録する君
// ==UserScript== // @name Mouse dictionary helper // @namespace http://tampermonkey.net/ // @version 0.4 // @description Mouse Dictionary で引いた結果をAnkiwebのdeckに登録する君 // @author @ozero // @match *://*/* // @grant GM.setValue // @grant GM.getValue // ==/UserScript== 'use strict'; //Mouse dictionaryウィンドウクリック時の処理及び関連付け ( () => { let mouse_dictonary_helper = {}; //Mouse dictionaryウィンドウの内容をGM.setValueでGMストレージに保存 mouse_dictonary_helper.gsetval = (event) => { let mdh_element = document.getElementsByClassName('mouse_dictonary_helper') if(!mdh_element[0]){ return false; } let content = mdh_element[0].innerText; GM.setValue( "mdhtmp", content ); //console.log("set mdh", content); //Ctrlキー押下有無(→AnkiwebでAutofill後自動save&close)も持っとく if(event.ctrlKey ){ GM.setValue( "mdhAutosave", "yes" );//set autosave flag }else{ GM.setValue( "mdhAutosave", "no" ); } //ついでにAnkiwebのデッキ追加ウィンドウを開く window.open('https://ankiuser.net/edit/', '_blank'); return; }; //Mouse dictionaryウィンドウの有無をpolling(200ms毎)してクリックイベントを追加 const mdh_window_poll = () => { let mdh_element = document.getElementsByClassName('mouse_dictonary_helper') if(mdh_element[0]){ mdh_element[0].addEventListener('click', mouse_dictonary_helper.gsetval, false); console.log("mdh addEventListener"); return true; }else{ setTimeout(()=>{ mdh_window_poll(); }, 200); //console.log("mdh polling"); return false; } } mdh_window_poll();//Pollingの起動 } )(); //Ankiwebのデッキ追加URLを開いた際の入力欄autofill (async function(){ if(window.location.href !== "https://ankiuser.net/edit/"){ return; } const mdhtmp = await GM.getValue( "mdhtmp", "" ); if(mdhtmp === ""){ return; } //console.log("get mdh", mdhtmp); //Util const sleep = (msec) => { return new Promise(resolve => setTimeout(resolve, msec)) }; //wait for form-dom loaded let loaded = false; while(!loaded){ let el_front = document.getElementById("f0"); if(!el_front){ await sleep(100); continue; } let el_back = document.getElementById("f1"); if(!el_back){ await sleep(100); continue; } loaded = true; } //Autofill const mdhtmp_2 = mdhtmp.split("\n\n"); const mdhtmp_3 = mdhtmp_2.shift().split("\n"); const head = mdhtmp_3.shift().toLowerCase();//登録する単語は小文字に揃える const body = mdhtmp_3.join("\n"); let el_front = document.getElementById("f0"); let el_back = document.getElementById("f1"); el_front.innerText = head; el_back.innerText = body; //Clear GM.setValue( "mdhtmp", "" ); //もし既知の単語ならAlert出してここで止める const mdhKnownwordJson = await GM.getValue( "mdhKnownword", "{}" ); let mdhKnownword = JSON.parse(mdhKnownwordJson); if(mdhKnownword[head]){ document.title = "⚠二重登録"; alert("二重登録: 単語 '" + head + "' は、過去にデッキに登録されています"); return; }else{ //既知の単語に追加する mdhKnownword[head] = true; GM.setValue( "mdhKnownword", JSON.stringify(mdhKnownword) ); } //Autosave & close const mdhAutosave = await GM.getValue( "mdhAutosave", "no" ); if(mdhAutosave !== "yes"){ return; } GM.setValue( "mdhAutosave", "" );//clear autosave flag //Tell Autosave&close to user document.getElementById("msg").innerText="Auto Save & Auto Close ENABLED."; document.getElementById("msg").style.display = "block"; await sleep(500); let el_btn = document.querySelector("body > main > p > button"); el_btn.click(); await sleep(1000); window.close(); })(); //Ankiwebの登録済み単語一覧を読み取ってGM.setValueでローカルに格納しておくやつ (async function(){ if(window.location.href !== "https://ankiweb.net/search/"){ return; } let el_words = document.querySelectorAll("body > main > table > tbody > tr > td"); if(el_words.length < 1){ return; } //登録済み単語一覧をストレージに格納する let words = {}; for(let el_w1 of el_words){ let el_w2 = ("" + el_w1.innerText).split(" / "); if(el_w2.length < 2){ continue; } let word = el_w2[0].toLowerCase(); words[word] = true; } GM.setValue( "mdhKnownword", JSON.stringify(words) ); return; })(); //console.log("mdh loaded");