요새 제 오픈소스 게시판을 익스플로어11에 맞게 수정을 했는데요... 블록

WYSIWYG 에디터 모드에서 툴바 레이어를 클릭하는 부분이 동작하지를 않습니다. 아래 소스가 해당 edit.js 파일의 소스인데 get_selection() 함수의 21행 부분이 "잘못된 인수입니다" 에러가 뜹니다. 알고 보니 this.m_selection 과 this.m_selection.select() 가 익스플로어11에서 전혀 동작을 하지 않더라구요. 이것만 해결하면 거의 다 해결한 셈이 되는데 혹시 이 코드 고치는 방법 아시는 분 계신가요? 구글에서 찾아봐도 명쾌한 답이 없어서 답답합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// JavaScript Code
function CSelection()
{
    this.m_selection = null;
    this.GetSelection = get_selection;
    this.PutSelection = put_selection;
}
 
function get_selection()
{
    if(this.m_selection != null)
    {
        if(this.m_selection.type != "Control")
        {
            /*var oRng1 = memoiW.document.body.createTextRange();
            var oRng2 = oRng1.duplicate();
            if(oRng1.inRange(oRng2) == true)
            {
                oRng2.select();
            }*/
            if(memoiW.document.body.createTextRange().inRange(this.m_selection) == true)
            {
                this.m_selection.select();
            }
        } else {
            this.m_selection.select();
        }
    }
}
 
function put_selection()
{
    if(typeof window.getSelection != "undefined"){
        this.m_selection = memoiW.window.getSelection();
        this.m_selection.type = typeof memoiW.document.getSelection;
    } else if(typeof document.selection != "Control"){
        this.m_selection = memoiW.document.selection.createRange();
        this.m_selection.type = memoiW.document.selection.type;
    }
}
 
function deactivate_handler()
{
    if(DocReadyState)
    {
        selectionObj.PutSelection();
    }
}

덧글

  • 절망의어둠™ 2014/10/22 07:38 # 삭제 답글

    익플11에 똥묻었다는 소리를 듣고 왔소
  • Hide_D 2014/10/22 10:56 # 답글

    this 용법이 굉장히 이상합니다. 이거 먼저 수정해보세요.
  • 희망의빛™ 2014/10/22 17:23 #

    이게 익스플로어8에선 제대로 완벽하게 동작합니다. 익스플로어11에선 위지윅 에디터가 제대로 동작하지 않을 수 있다고 영문 사이트에서 나온 걸 봤는데 방법이 없는 건 아닌지 불길합니다. 이렇게 되면 정말 익스플로어 11에 똥이 묻은 거나 다름없는 상황이 되네요. 진짜로 답없네 MS... 상당히 고의적이지 않나요 여러분?
  • 희망의빛™ 2014/10/22 17:32 #

    그리고 보니 저도 this.m_selection 에서 this가 어느 객체, 무엇을 지칭하는지 모르겠습니다. edit.js 다른 부분의 소스를 봐도 selectionObj.m_selection 이렇게만 나와있지 this가 무엇을 넘겨받았는지는 나오지 않았던것 같습니다. 저도 처음에 용법이 상당히 생소하다란 느낌을 받았는데 이걸 어떻게 손대야 할지 감이 안오네요. ㅡ_ㅡ;
  • 희망의빛™ 2014/10/22 17:36 #

    if(memoiW.document.body.createTextRange().inRange(this.m_selection) == true)
    {
    this.m_selection.select();
    }

    이 부분을 아래와 같이 변형해도 에디터 현재 커서가 아닌 맨 앞부분에 툴바레이어 아이콘이 삽입되는 등 오동작을 합니다.

    var oRng1 = memoiW.document.selection.createRange();
    if(memoiW.document.body.createTextRange().inRange(oRng1) == true)
    {
    oRng1.select();
    }
  • Hide_D 2014/10/23 01:11 #

    this를 대체하는 가장 간단한 시도로, this 대신 전역 공간인 window를 쓰는 방법이 있습니다.

    만약 위의 애매한 this를 window로 모두 바꾸어도 해결이 되지 않는다면, 다른 문제겠죠.
    코드 상 iframe을 사용하는듯 보이니 그 내부 코드문제일 수도 있구요.
  • 희망의빛™ 2014/10/23 12:28 #

    이전엔 잘 동작했는데 익스플로어11로 넘어오면서 생기는 문제라니까요. iframe 내부 코드엔 전혀 이상이 없어보이는데요? 익스11이 예전에 사용했던 웹페이지들의 자바스크립트를 지원하지 않으면서 발생하는 문제입니다.
  • 희망의빛™ 2014/10/23 13:26 #

    익스플로어8과의 호환성을 없애면서 크롬에서 동작하는 방식으로 구현하는 방법이 있다고는 하는데 그건 의미가 없죠. 현재 크롬과 파이어팍스에서도 기본적으로 어느 정도까지는 위지윅 에디터가 동작하니까요. 그럼에도 불구하고 25행을 보시면 알겠지만 거기에 else 문으로 크롬 계열이 동작할 때 처리를 해주고 있는데 소스가 앞선 행과 똑같잖아요. 그 부분을 익스11이 전혀 처리를 해주고 있지 못합니다. 결론은 크롬에서 동작하는 방식을 써도 방법이 없다는 건데... 왜냐하면 크롬에선 else 문 다음의 this.m_selection.select(); 이 부분이 제대로 동작을 한다는 이야기니까요. 익스플로어11만 이걸 지원하지 않는다는 건데... 이것도 좀 이상합니다.
  • Hide_D 2014/10/23 20:12 #

    이번 건과 관계없이 한마디 드리자면,
    '예전'에 돌아간다고 해서 그 코드가 '표준' (또는, 다르게 말해 '정답')인 것은 아닙니다.

    원래는 그렇게 동작하지 않아야 하거나, (특히 IE 6~8 등의 구 버전)
    해당 방식의 동작에 대해서는 '명시 되지 않았거나', (특히 IE 6~8 등의 구 버전!!!!!)
    한 경우에는 다른 웹 브라우저, 다른 버전에서 동작을 보증하지 않습니다!

    원칙은! 가능한 웹 표준에 맞게 짜고, 표준에 벗어나는 것을 예외로 처리하는겁니다!

    예전부터 전혀 안지키시고, 앞으로도 이 원칙 지킬 생각 전혀 없어보이지만, 적어둡니다.
  • Miyun_86 2014/10/22 17:57 # 삭제 답글

    그럼 그냥 IE8이나 붙잡고 사세요, 내 참.

    개발자라고 이름 달꺼면 최신 기술 계속 적용해가면서 사람들이 많이 쓰는 것을 따라가야 하는데 언제적 제로보드4 기반에 언제적 IE8 호환성만 봅니까?
  • 2014/10/23 01:07 # 삭제 답글 비공개

    비공개 덧글입니다.
  • 희망의빛™ 2014/10/23 12:13 #

    실제 발음이 익스플로어 아닙니까? 익스플로러에서 '러' 는 묵음으로 '어' 로 들리는 걸로 알고 있습니다만...
  • D 2014/10/23 13:17 # 삭제 답글

    니꺼 아니야 병신아
  • 희망의빛™ 2014/10/23 13:51 #

    헐~ 제가 제로보드4 공개 버전인 zb41pl8 을 상당 부분 보강하고 수정해서 개작했기 때문에 "제 오픈소스 게시판" 이라고 표현했는데 뭐가 그리 불만이신지.. 욕은 좀 삼가해 주시죠. 정말 예의가 없군요. ㅡ_ㅡ

    모르는 분이 계실까봐 부연설명 드리는데요 처음에 제로보드 배포자를 존중해 제로보드4 용어를 계속 사용하려고 했는데 그 용어는 사용하지 말라는 여러분들의 열화와 같은 성화에 제가 이렇게 부르기로 했는데 이제 또 뭐가 잘못됐습니까? "제" 란 표현이 그렇게 거슬리셨던 모양이군요. 수정된 소스는 확인해 보셨는지 모르겠군요. 물론 저도 공개된 소스를 가지고 수정 첨가한 것이지만 제 노력도 상당히 많은 부분이 첨가됐다는 걸 알아주셨음 좋겠습니다.

    그런 소스에다 이런 욕을 하는 건 예의가 아니라고 봅니다. 앞뒤 정황을 모르고 날뛰는 경솔한 행위죠.
  • ㅇㅇㅇ 2014/10/23 17:29 # 삭제

    그럼 그 수정한 부분만 니꺼라고 할 수 있는거지. 어떻게 니가 일부를 첨삭했다고 해서 저 프로그램이 니께 될 수 있냐. 애당초 저 엔진을 니가 설계할 수 있냐? 넌 죽었다 깨어나도 저런거 못만들어. 그러니까 수정하고 덧붙이는 거지 않어? 남이 해놓은것에 발가락 하나 올리고 니꺼라고 하는거 정말로 창피하지도 않어? 말을 똑바로 해. 저게 어떻게 니꺼야. 니꺼 아냐야.
  • ㅇㅇㅇ 2014/10/23 17:31 # 삭제

    그리고 모르긴 뭘 몰라..-_-;; 애당초 이해를 잘못한건 너구만. 배포할때 제로보드라는 이름 쓰지 말라고 했지 원저작자 이름 빼도 된다고 하든? 제로보드라는 이름 쓰지 말라고 해서 니꺼라고 해도 된다고 하든? 좀 창피한줄 알아라.
  • 희망의빛™ 2014/10/23 18:09 #

    무슨 소릴 하는지 정말 당췌 모르겠군요. 제로보드4가 언제 제꺼라고 했나요? 참. 그리고 원저작자 이름을 뺐다니요. 제 사이트에서 소스보기로 함 저작권 관련 부분을 읽어보시지요. 원래 파일에 있는 저작권에다 변경된 부분까지 꼼꼼히 넣어두었는데 참 없는 말 만들어 내지 마시죠. 그리고 개발자면 누구나 다른 사람의 소스를 보고 자신이 수정한 부분을 첨가해서 완성하기 마련입니다. 제로보드4 제작자가 얼마나 실력이 뛰어난지 모르겠지만 그 분도 처음엔 아마 다른 프로그래머의 소스를 참고하지 않았을까요? 100% 그 분이 전부 알고리즘을 손수 제작했다면 정말 뛰어난 실력자라고 판단되네요. ^^; 아마 그럴 일은 없지 않겠습니까? 뭐 그 분 기분나쁘라고 하는 소리는 아니지만 너무 험한 말씀을 하시니까 저도 한마디 하지 않을 수 없네요. ㅡ_ㅡ
  • 희망의빛™ 2014/10/23 18:16 #

    그리고 프로그래밍은 꼭 실력이 뛰어난 사람만 하는 게 아닙니다. 얼마든지 아마츄어들도 자신의 기량을 발휘할 수 있는 것이죠. 여기에 덧글 다는 사람들은 대부분 자신은 엄청난 개발자인 것 마냥 행세하면서 이런 아마츄어 개발자들을 폄하하는데 그건 분명 자만심의 발로이자 경솔한 행위라고 생각합니다. 제로보드4 소스가 개발된 이후 아마츄어 개발자가 더 많이 그 소스를 분석했을 수도 있다는 사실 분명히 기억해 두십시요. 물론 저를 지칭하고 말씀드리는 건 아닙니다만...

    정말 지금까지 덧글들을 보면서 일일이 대꾸할 가치를 못느끼는 글을 많이 봐왔습니다만 정도가 지나치면 그것도 큰 허물이 된다는 사실을 잘 기억하시기 바랍니다. 안보인다고 함부로 말하면 안된다는 거지요.
  • 글리 2014/10/23 14:28 # 답글

    21행 조건식에서 잘문된 인수입니다라는 에러를 내뿜는 문제면 21행에 집중해야지요. 님이 문제라고 주장하는 select() 메서드는 21행 조건식에서 선택된 텍스트로 작동할 뿐이니 작동안하는게 당연하지요? 님이 문제라는 select() 메서드의 작동 원리를 정말 아시나요?? 이분 이런식으로 확인하기 쉽게 질문해드려도 아는지 모르는지 그저 해봤다는 식으로 두리뭉실하게 대답하시던데 ㅡ_ㅡ+ 이게 브라우저 문제(예를 들어 document.selection 오브젝트지만 본문은...) 이전에 개인이 호환성 유지가 가능함에도 선언을 안해 HTML5 문법이 적용되서 생긴 문제라면 그때가선 무슨 반응을 하실려고 무턱데고 MS만 욕하는지도 모를 따름이고... 답답하다.
  • Miyun_86 2014/10/23 17:42 # 삭제

    포기하세요. 어설프게 아는 사람 상대하면 더 골치아프지 않습니까(......)

    - MS 까는건 XP 업데이트 안 해준다고 까더군요, 글들 찾아보니 -_-...
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


웹로그 검색