generated at
UserScriptのテンプレート機能が使えなくなった
/scrasobox/テンプレートで紹介されているテンプレート機能が昨日(06/09)ごろから突然使えなくなりました.
ネットワーク,ブラウザ,プロジェクト等を切り替えてみましたが改善しません.
Twitter上で他にも同じトラブルに陥っている方を見かけました.

こちらで質問するのもお門違いかもしれませんが,Scrapboxの仕様変更の影響では?と思ったのでこちらで質問しました.


あまり詳しくないのですが,エラー結果から, offsetTop というプロパティが使われなくなったのでしょうか?
error
index.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 じゃないとダメだった
解説
UserScriptのテンプレート機能が使えなくなった#60c34f281280f00000366799 line (scrapboxの行のDOM)の中から最後尾の文字のDOMを取得するコードです
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の窓辺madobeです。解説いただきありがとうございます!こちらに気づかず放置しててすみません!現在は修正したコードを公開しているのでお試しを m(_ _)m
更新感謝です!takker
おっと、 span.char-index ではなくて span.char-index:last-of-type でしたね。解説間違えてました。