reviewer の Javascript

カードレビューに特化しない一般的な解決策については、webview セクション を参照してください。

Anki は、レビュー画面、プレビューダイアログ、カードレイアウト画面に表示される前に、質問と回答の HTML を修正するフックを提供します。これは、カードに Javascript を追加するのに便利です。

例は、以下の通りです。

from aqt import gui_hooks
def prepare(html, card, context):
    return html + """
<script>
document.body.style.background = "blue";
</script>"""
gui_hooks.card_will_show.append(prepare)

このフックは 3 つの引数を取ります: 質問または回答の HTML 、現在のカードオブジェクト(例えばアドオンを特定のノートタイプに制限できる)、フックが実行されているコンテキストを表す文字列です。

修正された HTML を返すことを確認してください。

コンテキストは以下のいずれかです。contextは、"reviewQuestion", "reviewAnswer", "clayoutQuestion", "clayoutAnswer", "previewQuestion", "previewAnswer "のうちの1つです。

カードレイアウト画面での回答プレビュー、および「両面表示」に設定されたプレビューアでは、「回答」コンテキストのみが使用されます。つまり、カードの裏側に追加するJavascript は、表側だけに追加されるJavascript に依存しないようにする必要があります。

Anki は新しいテキストを表示する前に前のテキストをフェードアウトさせるため、正しいタイミングでスクロールなどのアクションを実行するには、Javascript のフックが必要です。以下のように使用します:

from aqt import gui_hooks
def prepare(html, card, context):
    return html + """
<script>
onUpdateHook.push(function () {
    window.scrollTo(0, 2000);
})
</script>"""
gui_hooks.card_will_show.append(prepare)
  • onUpdateHook は、新しいカードが DOM に配置された後、表示される前に起動されます。

  • onShownHook は、カードがフェードインした後に発生します。

フックは、質問と回答が表示されるたびにリセットされます。