モバイル版Scrapboxでキャレットを外
すUserScriptの草稿
code:hide.js
const textarea = document.getElementById('text-input');
const reactKey = Object.keys(textarea)
.find((key) => key.startsWith("__reactFiber"));
const input = textareareactKey.return.return.stateNode; const cursor = input._stores.find((obj) => obj.hide);
cursor.hide();
DevToolsでキャレットが外れる動作を探っていたらCursorというオブジェクトに行き当たった
hide()を叩けばキャレットが外れる
当然内部オブジェクトなのでアクセスはできない
呼ばれている箇所からどうにかアクセスできないかと探っていたらDesktopTextInputというオブジェクトを見付けた
DesktopということはMobileもあるかと探したらあった
そもそもキャレットが外れないのはMobile側のblur処理でCursor.hide()を叩かないため
感謝kuuote.icon
更によく見たらCursorオブジェクト(これが目的)をsubscribeする処理があって、subscribeを覗いたらComponentの中に入れ込んでたので取ってみたらこれもあっさり取れた
さらっと書いたけどだいぶ苦労したkuuote.icon
外からどうにかイベントを流し込めないか→上に書いてる通り無理
window.scrapboxからどうにかアクセスできないか→無理
どこかに内部オブジェクトへの参照生えてないか→あるわけない
webpackの入口がないか→無理
実装した