2012-02-11 54 views
1

我想要運行一個非常基本的Chrome本機客戶端應用程序。我想要做的就是響應擊鍵,例如,每當用戶按下某個鍵時顯示「You pressed X」。我一整天都在,但每次按下按鍵,我都會收到「Uncaught TypeError:Object#has no method'postMessage'」。Chrome本機客戶端,使用onKeyDown事件的錯誤

錯誤都在Javascript中; Native Client C++模塊正常工作。

的Javascript在文件頭:

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');} 
} 

在頁面:

<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> 

我已經試過了約15種不同的方法:將其添加到用的addEventListener body標籤,把它加直接與onKeyDown身體標記...沒有任何工作。

我有C/C++和PHP的經驗,但我的Javascript真的很薄弱。我想我必須錯過一些根本性的和明顯的。

+0

你爲什麼想要做一個全局變量?無論如何,JavaScript只有函數範圍,如果你省略「var」,反正它將是「全局的」。所以不要認爲它在功能之外分配它是有區別的! – 2012-02-12 02:56:02

+0

Hi--大部分代碼直接來自Native Client網站上的Hello World教程,包括該全局變量。我的唯一真正的東西就是關於監聽onKeyDown事件的部分。我只是想讓它工作。 – felwithe 2012-02-12 03:36:58

回答

0

已解決。在該頁面的其他地方,包含遊戲模塊的DIV正在更改其內容,從內存中刪除了該模塊。