DeepLのChrome拡張機能をScrapbox内限定で無効化するUserScript
DeepLのChrome拡張機能は便利だなぁ。
拡張機能が欲しい人はここ:DeepL Translate (beta version) - Chrome Web Store
でもScrapbox内ではアイコンが邪魔くさいなぁ。
これ↓
https://scrapbox.io/files/61c9d1be2f57df001de2e6c6.png
本来はテキストエリアを翻訳するための機能なのだが、Scrapbox内ではうまく機能していない模様。
なのでScrapbox内では無効化するUserScriptを作った。
ぶっちゃけると拡張機能をクリックしてメニューを出して、「書く」を無効化すればそれで解決する。
https://scrapbox.io/files/61c9f8f78976ad00238d4fac.png
これに気づいたのがUserScript作った後です。はい・・・orz
一応、Scrapbox限定で無効化できるっていう利点はあるし、多少はね?(- -;)
ソース
code:removeDeepLExtention.js
function removeDeepLExtention(){
// 実行後は文字カーソルが更新されるまで待ち、更新された一定時間後にDeepL拡張機能の無効化処理を開始する。
let delayTime = 150 // カーソル移動してから削除するまでの秒数(ミリ秒)。
const target = document.querySelector(".cursor")
const observer = new MutationObserver(records => {observer.disconnect();remove(delayTime);})
observer.observe(target, {attributes: true})
function remove(delayTime){
window.setTimeout(()=>{
let target = document.querySelector("deepl-inline-translate")
if (target === null) return
target.remove();
},delayTime)
}
}
removeDeepLExtention(); // 通常起動
scrapbox.on('page:changed', removeDeepLExtention); // ページを切り替えた時にも起動
scrapbox.on('lines:changed', removeDeepLExtention); // 行を編集した時にも起動
注意点
これを使用すると右クリックメニューの「選択したテキストを翻訳」も使えなくなります。
それはDeepLの拡張機能がShadow DOMを利用し、その中に表示部分をすべてまとめているため。
このUserScriptではそのShadow DOM自身を削除している。
うまく削除されずに残る場合は2行目のdelayTimeの値を増やしてみてください。
このUserScriptを使う場合はimportを使わずにソース全文をコピペして下さい(セキュリティ的な理由)。
参考にしたサイト
JavaScriptのMutationObserverでDOMの変化を監視する方法 - Qiita
JavaScript | 指定時間経過後に1回実行する(window.setTimeout)
/shokai/UserScript Events
#UserScript #DeepL #Chrome拡張機能