我是AIR开发的新手,刚刚开始认真构建我的第一个简单的应用程序。我想打开一个新窗口,在第一次运行时提示用户输入所需的设置。在测试新窗口并检测其关闭状态时,我已完成以下操作(包括一些jQuery代码):
以下代码用于在运行主应用程序时打开新窗口(如打开时所示)。
$(document).ready(function(){
var options = new air.NativeWindowInitOptions();
options.type = air.NativeWindowType.UTILITY;
var windowBounds = new air.Rectangle(200,250,300,400);
//create the new window
newHTMLLoader = air.HTMLLoader.createRootWindow(true, options, true, windowBounds);
newHTMLLoader.load(new air.URLRequest("setup.html"));
newHTMLLoader.window.opener = window;
newHTMLLoader.window.nativeWindow.addEventListener(air.Event.CLOSE, handleNewSettings);
}
下面的代码直接位于jQuery document.ready函数的右大括号之后。其目的是处理设置窗口的关闭事件。如果它在没有提交的情况下关闭 - 这就是我到目前为止所测试的全部内容 - 我希望它删除事件监听器,如手册所示,以改善内存,并关闭主应用程序窗口(当前不可见)。
function handleNewSettings(event){
//remove the event handler from memory first...
newHTMLLoader.removeEventListener(Event.CLOSE, arguments.callee);
//this is my event handler code
alert('yay');
window.close();
}
我在关闭设置窗口后出现了一个似乎是AIR运行时错误的信息:
发生了ActionScript错误: “TypeError:错误#2007:参数 type必须为非null。 在flash.events::EventDispatcher/removeEventListener()“
我认为这个错误与应用程序范围有关,但我也不太了解JS范围规则。如果我注释掉removeEventListener行,它似乎运行代码;但是,我不确定我是否正确地做了所有这些。我试着在我的查询中详细说明,但最初的问题可以追溯到问题的标题。
答案 0 :(得分:2)
错误是由于缺少类(或者是命名空间?)
newHTMLLoader.removeEventListener(Event.CLOSE, arguments.callee);
......本来应该......
newHTMLLoader.removeEventListener(air.Event.CLOSE, arguments.callee);
我仍然不确定这是否是推荐或正确处理此类事情的方法。