我正在尝试使用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!?
以前有人见过这个吗?
谢谢 拉杜