2013-06-29 4 views
0

나는 Firefox Addon을 작성 중이며 프로그래밍 방식으로 키 이벤트를 생성하고 브라우저에서 사용자가 해당 키를 입력 한 것처럼 모든 작업을 수행해야합니다.Firefox addon : DOMWindowUtils.sendKeyEvent misbehaving

DOMWindowUtils (https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIDOMWindowUtils)의 sendKeyEvent를 사용하려고합니다. 다음 문제를 발견했습니다 :

contentEditable 필드 내에 왼쪽 화살표/오른쪽 화살표와 같은 이벤트가 생성되면 브라우저가 커서 위치를 변경하지 않습니다. 왜? (참고 : 'a', 'b'와 같은 문자를위한 이벤트를 생성하면 브라우저가 contentEditable 영역 내의 텍스트를 적절히 업데이트하므로 코드에 명백한 결함이 없음). contentEditable이 아닌 필드의 경우 예상대로 작동합니다.

환경 - 브라우저 '(코드에는 크롬 권한이 필요함)를 사용하여 도구 -> 웹 개발자 -> 스크래치 패드에서 실행할 수있는 샘플 코드.

var doc = gBrowser.contentDocument, 
    win = doc.defaultView; 

var domWindowUtils = win.QueryInterface(Components.interfaces.nsIInterfaceRequestor) 
        .getInterface(Components.interfaces.nsIDOMWindowUtils); 

var div = doc.getElementById('contentEditableDiv'); 
div.focus(); 

['keydown', 'keypress', 'keyup'].forEach(function(type) { 
    // if I generate characters like 'a', 'b' they work 
    // domWindowUtils.sendKeyEvent(type, 65, 97, 0, 0); 

    // 37 is left arrow, 38 right arrow 
    domWindowUtils.sendKeyEvent(type, 37, 0, 0, 0);  
});      

나는 initEvent/dispatchEvent을 사용해 보았지만 같은 결과를 나타 냈습니다.

안정적으로 이벤트를 생성하고 브라우저가 모든 작업을 수행 할 수있는 방법이 있습니까?

답변

0

반환 값의 의미를 다시 읽고, 기본 동작이 이 아니고이 아닌 경우 true입니다.

+0

감사합니다. 이 정보를 바탕으로 내 질문을 업데이트했습니다. 그러나 여전히 화살표 키와 관련된 이벤트를 생성 할 때 커서/캐럿을 이동하는 기본 동작을 얻지 못하는 이유는 무엇입니까? –