Phonegap Windows 7应用程序在带有后退按钮的document.addEventListener上挂起

时间:2014-09-10 08:00:37

标签: windows cordova addeventlistener

我正在尝试使用Windows Phone 7的第一个Phonegap应用程序。

我已经通过NodeJS在Windows 7 Pro工作站和Phonegap 3.4.0(包含wp7平台)上安装了Windows Mobile SDK 7.1(包括模拟器,VS2010 for Win Phone,XNA,e.t.c。)。

我已经从命令行使用phonegap命令创建了我的第一个项目(phonegap create ...)。 我已经使用phonegap命令(phonegap build wp7)添加了wp7平台。 我在VS2010中为Win Phone打开了创建的项目,以便在模拟器上运行它。 ...到目前为止一切运行正常=应用程序在模拟器上启动...(记住它是 Phonegap默认样本应用程序

但是,如果我在deviceready事件上的处理函数中添加以下代码,它似乎挂起了:

...
console.log('call document.addEventListener("backbutton")');
document.addEventListener("backbutton", onBackButton,false);
console.log('end document.addEventListener ok');
...

执行第一个日志输出但不显示第二个日志输出。它似乎挂起在addEventListener(“backbutton”,...) ...如果我评论这一行我得到两个日志输出。

以下是代码的相关部分:

var app = {
    // Application Constructor
    initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    // Bind any events that are required on startup. Common events are:
    // `load`, `deviceready`, `offline`, and `online`.
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    // deviceready Event Handler
    // The scope of `this` is the event. In order to call the `receivedEvent`
    // function, we must explicity call `app.receivedEvent(...);`
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },
    // Update DOM on a Received Event
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');
        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');
        console.log('Received Event: ' + id);

        console.log('call document.addEventListener("backbutton")');
        document.addEventListener("backbutton", this.onBackButton,false);
        console.log('end document.addEventListener ok');
    },

    onBackButton: function() { }
};

输出:

Received Event: deviceready
call document.addEventListener("backbutton")

根据Phonegap文档,Windows 7支持“后退”事件:http://docs.phonegap.com/en/3.4.0/cordova_events_events.md.html#backbutton

更新

我发现我需要使用上下文'this',所以我更正了:

document.addEventListener('backbutton', this.onBackButton ,false);

......但它也没有用。另一方面,如果我尝试注册另一个事件,f.x。 “点击”它工作正常,即执行更进一步(我得到第二个日志输出),当我点击文档时,我得到了事件。

document.addEventListener('click', this.onBackButton ,false);

有人有想法,建议或解决方案吗?

更新2:

通过以下函数添加更多调试输出:

window.onerror = function(message, file, line)
{
  console.log('error on ' + file + ' at ' + line + ': ' + message);
}

我收到以下额外错误:

error on x-wmapp1:/app/www/cordova.js at 827: 'ArrayBuffer' is undefined

我不知道addEventListener('backbutton')和ArrayBuffer之间的连接是什么,但它看起来像是cordova中的一个bug! ...或者......在Windows Phone SDK 7.1中没有定义ArrayBuffer!?

以前有人见过这个吗?

谢谢 拉杜

0 个答案:

没有答案