UserScriptのテンプレート機能が使えなくなった
ネットワーク,ブラウザ,プロジェクト等を切り替えてみましたが改善しません.
Twitter上で他にも同じトラブルに陥っている方を見かけました.
こちらで質問するのもお門違いかもしれませんが,Scrapboxの仕様変更の影響では?と思ったのでこちらで質問しました.
あまり詳しくないのですが,エラー結果から, offsetTop
というプロパティが使われなくなったのでしょうか?
errorindex.js:49 Uncaught TypeError: Cannot read property 'offsetTop' of undefined
at __loadTemplate (script.js?1623288513715:156)
at onClick (script.js?1623288513715:148)
at Object.ba (index.js:85)
at ja (index.js:85)
at ka (index.js:85)
at oa (index.js:85)
at lc (index.js:85)
at jc (index.js:85)
at mc (index.js:85)
at sc (index.js:85)
at we (index.js:85)
at Ma (index.js:85)
at Rc (index.js:85)
at id (index.js:85)
at i.unstable_runWithPriority (index.js:93)
at cg (index.js:85)
at Ga (index.js:85)
at gd (index.js:85)
at HTMLDocument.wrapped (index.js:49)
diff+ const lastChar = $(line).find('span.char-index:last-of-type').last().get(0)
- const lastChar = $(line).find('span[class^="c-"]').last().get(0)
span[class^="c-"]
を span.char-index
に書き換えてください
span.char-index:last-of-type
じゃないとダメだった
解説
scrapboxでは、文字の座標を計算するために1文字ずつ <span></span>
で囲っています
以前までは <span class="c-{index}">x</span>
( x
は任意の文字、 {index}
は文字番号)というHTML要素だったので、 span[class^="c-"]
というCSS selectorで行 line
に含まれるすべての文字を取得することができました
しかし、最近 <span class="char-index c-{index}">x</span>
という形にclassが変更されました
これは span[class^="c-"]
にマッチしない要素なので、 span[class^="c-"]
の検索結果( $(line).find('span[class^="c-"]')
)はなし( undefiend
)となります
最終的には const lastChar = undefined
と評価されます
undefined
に offsetTop
というpropertyは存在しないため、以下の行で TypeError: Cannot read property 'offsetTop' of undefined
が発生してしまいます
> __mimicClick(line.id, line.offsetWidth, lastChar.offsetTop + 10)
質問主< 助かりました!!解説も丁寧でとてもわかり易かったです.今後自分でUserScriptを組む参考にします.ありがとうございます🙏
scrasoboxの窓辺
です。解説いただきありがとうございます!こちらに気づかず放置しててすみません!現在は修正したコードを公開しているのでお試しを m(_ _)m
更新感謝です!
おっと、 span.char-index
ではなくて span.char-index:last-of-type
でしたね。解説間違えてました。