2012-02-11 2 views
1

매우 기본적인 Chrome Native Client 애플리케이션을 실행하려고합니다. 내가하고 싶은 것은 사용자가 키를 누를 때마다 "You pressed X"라고 표시하는 것과 같이 키 입력에 응답하는 것입니다. 나는 하루 종일 있었지만 키를 누를 때마다 "잡히지 않은 TypeError : Object #에 'postMessage' '메서드가 없습니다.Chrome 기본 클라이언트, onKeyDown 이벤트를 사용하는 중에 오류가 발생했습니다.

오류는 모두 자바 스크립트에 있습니다. Native Client C++ 모듈은 정상적으로 작동합니다. 문서의 머리에

자바 스크립트 :

페이지에서
myModule = null; // Global application object. 

function moduleDidLoad() { 
    myModule = document.getElementById('mymodule'); 

    alert("module loaded!") // this works 

    myModule.postMessage('hello'); // this works, and posts 'hello' to the module 

    // ERROR 
    document.body.onkeydown = function() {myModule.postMessage('hi');} 
} 

: 나는 약 15 가지 방법을 시도했습니다

<div id="listener"> 
    <script type="text/javascript"> 

    var listener = document.getElementById('listener'); 
     listener.addEventListener('load', moduleDidLoad, true); 

    </script> 

    <embed name="nacl_module" 
    id="mymodule" 
    width=0 height=0  
    src="mymodule.nmf" 
    type="application/x-nacl" /> 
</div> 

: 추가하여, 또는 addEventListener와 body 태그에 추가하여 직접 body 태그에 onKeyDown ... 아무것도 작동하지 않습니다.

C/C++ 및 PHP에 대한 경험이 있지만 자바 스크립트는 매우 약합니다. 나는 근본적이고 명백한 무언가를 놓치고 있어야한다고 생각한다.

+0

글로벌 변수를 만드는 이유는 무엇입니까? 어쨌든, 자바 스크립트는 함수 범위를 가지고 있으며 "var"를 생략하면 어쨌든 "전역"이됩니다. 그래서 함수 밖에서 할당하는 것이 효과적이라고 생각하지 마십시오! –

+0

안녕하세요 -이 코드의 대부분은 전역 변수를 포함하여 Native Client 사이트의 Hello World 자습서에서 직접 작성되었습니다. 정말 내 유일한 부분은 onKeyDown 이벤트를 청취하는 부분입니다. 나는 단지 그것을 작동 시키려고 노력하고있다. – felwithe

답변

0

해결. 페이지의 다른 곳에서 게임 모듈이 들어있는 DIV의 내용이 변경되어 메모리에서 모듈이 제거되었습니다.

관련 문제