본문 바로가기

Story/Javascript

kindeditor ie11 에서 붙여넣기시 원하는 위치에 놓이지 않고 맨끝에 붙을때.

반응형

kindeditor 라는 위지윅 웹 에이터 사용시 ie11 에서 ctrl+v 할때 문제가 발생합니다.

kindeditor 가 마지막 update 가 2013년 12월 22일 인대 ie11 에 대한 부분이 완벽하게 반영되지 않은거 같습니다.

ie11 로 ie 가 업데이트된후 javascript 부분에서 자주 문제가 발생하는대 ie11 이 기존 ie 와는 다른 userAgent 값을 가지기 때문입니다.

예전 버전은 msie 가 포함된걸로 구분을 했는대 ie11 은 이 값으로 구분을 할 수 없습니다.

 

다른 부분도 문제가 있을지 모르겠지만 붙여넣기시 문제가 되어서 해결방법을 찾던중 역시나 이부분이 문제가 되었습니다.

해결방법을 보면

kindeditor.js 파일 5860 line 쯤

K(doc.body).bind('paste', function(e){
    if (self.pasteType === 0) {
        e.stop();
        return;
    }
    if (pasting) {
        return;
    }
    pasting = true;
    K('div.' + cls, doc).remove();
    cmd = self.cmd.selection();
    bookmark = cmd.range.createBookmark();
    div = K('<div class="' + cls + '"></div>', doc).css({
        position : 'absolute',
        width : '1px',
        height : '1px',
        overflow : 'hidden',
        left : '-1981px',
        top : K(bookmark.start).pos().y + 'px',
        'white-space' : 'nowrap'
    });
    K(doc.body).append(div);
    if (_IE) {
        var rng = cmd.range.get(true);
        rng.moveToElementText(div[0]);
        rng.select();
        rng.execCommand('paste');
        e.preventDefault();
    } else {
        cmd.range.selectNodeContents(div[0]);
        cmd.select();
    }
    setTimeout(function() {
        movePastedData();
        pasting = false;
    }, 0);
});
인것을 다음과 같이 ie11 일때도 ie 로 인식식혀서 해결했다. 
K(doc.body).bind('paste', function(e){
    if (self.pasteType === 0) {
        e.stop();
        return;
    }
    if (pasting) {
        return;
    }
    pasting = true;
    K('div.' + cls, doc).remove();
    cmd = self.cmd.selection();
    bookmark = cmd.range.createBookmark();
    div = K('<div class="' + cls + '"></div>', doc).css({
        position : 'absolute',
        width : '1px',
        height : '1px',
        overflow : 'hidden',
        left : '-1981px',
        top : K(bookmark.start).pos().y + 'px',
        'white-space' : 'nowrap'
    });
    K(doc.body).append(div);

    var isIE11 = !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
    if ( _IE || isIE11 ) {
        var rng = cmd.range.get(true);
        rng.moveToElementText(div[0]);
        rng.select();
        rng.execCommand('paste');
        e.preventDefault();
    } else {
        cmd.range.selectNodeContents(div[0]);
        cmd.select();
    }
    setTimeout(function() {
        movePastedData();
        pasting = false;
    }, 0);
});
반응형