Safari+contentedtable에서 일본어로 중복 입력된 증상을 변환하는 회피법

Safari 12.0.1 contentedtable의 입력 표시줄에서 캐럿의 좌표를 얻기 위해 비어 있는 4<span>'node'를 넣어서 node를 만지작거리면 일본어 입력을 할 때의 전환이 중복 입력되는 현상을 만날 수 있다.Chrome과 Firefox에서 재현되지 않았습니다.
<template>
  <div class="content-editable-page">
    <div contenteditable="true" class="editable"
         ref="editable"
         @keyup="moveCaret"
    ><p>test</p></div>
  </div>
</template>

<script>
  import Vue from 'vue'

  export default Vue.extend({
    components: {
    },
    data () {
      return {
      }
    },
    computed: {
    },
    methods: {
      moveCaret () {
        const anchor = document.createElement('span')
        const sel = window.getSelection()
        const range = sel.getRangeAt(0)
        range.insertNode(anchor)
        const pos = anchor.getBoundingClientRect()
        anchor.parentElement.removeChild(anchor)
      }
    },
    mounted() {
    }
  })
</script>
피하는 좋은 방법이 떠오르지 않아 IME 전환 기간 좌표 위치를 얻지 않기 위해 컴포지션을 보기로 했다.이렇게 하면 중복 입력되지 않지만 전환 과정에서 공의 위치를 모르는 것이 단점...
<template>
  <div class="content-editable-page">
    <div contenteditable="true" class="editable"
         ref="editable"
         @compositionstart="compositionstart"
         @compositionend="compositionend"
         @keyup="moveCaret"
    ><p>test</p></div>
  </div>
</template>

<script>
  import Vue from 'vue'

  export default Vue.extend({
    components: {
    },
    data () {
      return {
        compositing: false
      }
    },
    computed: {
    },
    methods: {
      moveCaret () {
        if (!this.compositing) {
          const anchor = document.createElement('span')
          const sel = window.getSelection()
          const range = sel.getRangeAt(0)
          range.insertNode(anchor)
          const pos = anchor.getBoundingClientRect()
          anchor.parentElement.removeChild(anchor)
        }
      },
      compositionstart () {
        this.compositing = true
      },
      compositionend () {
        this.compositing = false
      }
    },
    mounted() {
    }
  })
</script>

좋은 웹페이지 즐겨찾기