모바일 기기에서는 복사를 하려면 롱탭을 눌러야 하므로 JMC touch에 있는 longTap을 이용하여 이벤트를 잡아서 처리하려고 봤는데요, 이벤트 호출 후 모바일 기기의 컨텍스트메뉴가 뜨는 것을 막을 방법을 못찾았습니다.

 

1. 그래서 찾아본 결과 웹소설쪽에서 이용하는 방법인데요,

css내에서 해당 div 속성에 

-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0) 를 추가해주면 글자 선택 자체가 막힙니다. 

 

속성별로 의미를 살펴보면 아래와 같습니다.

-webkit-touch-callout:none; (팝업창 차단하기)

-webkit-touch-select:none; (복사막기)

-ms-user-select:none; (텍스트 선택 불가)

-moz-user-select:none; (텍스트 선택 불가)

-webkit-user-select:none; (텍스트 선택 불가)

-user-select:none; (텍스트 선택 불가)

-webkit-tap-highlight-color:rgba(0,0,0,0) (링크를 터치했을때 나오는 기본 영역의 색상을 제어)

 

* 장점 : 모든 기기에서 복사 방지 기능이 동작한다.

* 단점 : 안드로이드 폰의 경우 플리킹 동작이 불가능한 상태가 됩니다. 갤럭시S2 구 버전(안드로이드2.3.6)에서는 플리킹도 동작 했으나, 갤럭시노트2 같은 안드로이드 상위 버전에서는 플리킹이 거의 동작하지 않았습니다. (간헐적으로 동작하는 경우도 있었습니다.)

 

 

2. 그래서 아이폰의 경우에만 위의 CSS를 적용하였고, 안드로이드에서는 CSS를 빼고 자바스크립트 이벤트를 이용하였습니다.

'onselectstart' 이벤트를 이용하여 해당 이벤트 호출 시 return false로 처리하였습니다.

 

* 장점 : 복사는 가능하지만 한번 셀렉트된 영역보다 늘리는 것은 막을 수 있다.

* 단점 : 아이폰에서는 해당 이벤트가 호출되지 않습니다. 

셀렉트가 시작되는 순간부터 막히므로 한 단어씩은 복사가 가능합니다.

안드로이드 상위 버전에서는 편집도구를 이용하여 전체 복사가 가능합니다.

 

 

3.

안드로이드 4버전을 대응하기 위해 JMC 플리킹에서 커스텀이벤트도 이용합니다. 터치가 시작될때 이벤트가 호출되어 stop 하는 효과가 있다고 합니다. 

플리킹 초기화하는 부분에서 touchStart라는 커스텀이벤트를 잡아서 아래와 같이 stop 해주면 플리킹 액션의 영향 없이 글자 선택을 막을 수 있습니다.

'touchStart': function(oCustomEvent) {

oCustomEvent.oEvent.stop(jindo.$Event.CANCEL_DEFAULT);

}


* 장점 : 터치 시작 시점에 이벤트를 막아줘서 글자 선택 자체가 안됨

* 단점 : 안드로이드 하위 버전 (테스트 폰은 안드로이드2.3.6)에서는 막히지 않고 복사 가능합니다.