【问题标题】:Chrome Native Client, errors using onKeyDown eventChrome Native Client,使用 onKeyDown 事件时出错
【发布时间】:2012-02-11 23:16:28
【问题描述】:

我正在尝试运行一个非常基本的 Chrome Native Client 应用程序。我想做的是响应击键,例如每当用户按下一个键时显示“你按下了 X”。我已经做了一整天了,但是每次按一个键,我都会收到“Uncaught TypeError: Object # has no method 'postMessage'”。

错误都在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 将其直接添加到 body 标签中......没有任何效果。

我有使用 C/C++ 和 PHP 的经验,但我的 Javascript 真的很弱。我想我一定遗漏了一些基本而明显的东西。

【问题讨论】:

  • 你为什么要创建一个全局变量?无论如何,javascript只有函数范围,如果你省略“var”,它无论如何都是“全局的”。所以不要认为在函数之外分配它会有所不同!
  • 您好——大部分代码直接来自 Native Client 站点上的 Hello World 教程,包括该全局变量。实际上,唯一属于我的就是关于监听 onKeyDown 事件的部分。我只是想让它工作。

标签: javascript google-chrome google-nativeclient


【解决方案1】:

解决了。在页面的其他地方,包含游戏模块的 DIV 的内容发生了更改,从而将模块从内存中删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多