【Javascript】iOSでblur時にSelection.rangeCountが取得できなかったときに調べたこと

今回やりたかったのはfocusが外れるときの要素を保存しておき、再びfocusがセットされるときにカーソル位置を戻すということ

試したのはこんなコード

<div id="editor" contenteditable="true"></div>
<input type="button" id="restore-range" value="restore range" />

<script>
var saveRange
$('#editor').on('blur', function() {
  var s = window.getSelection()
  if (0 < s.rangeCount) {
    saveRange = s.getRangeAt(0)
  }
})

$('#restore-range').on('click', function() {
  if (saveRange) {
    var s = window.getSelection()
    if (0 < s.rangeCount) {
      s.removeAllRanges()
    }
    s.addRange(range)
  }
})
</script>

PC版のChromeAndroid端末では期待通りに動くものの、iOS では s.rangeCount の部分が0のため動かず。
iOSではwindow.getSelection().rangeCount や getRangeAtが使えないのかと困っていたが以下のコードだとちゃんと取得できる。

$('#editor').on('mousedown mouseup keydown keyup', function() {
  var s = window.getSelection()
  if (0 < s.rangeCount) {
    range = s.getRangeAt(0)
  }
})

きっとblurの前に更新されてしまうのだろうという想像。どのタイミングがベストかわからないけどとりあえず上記のコードでやりたいことはできるかな。以上です