这对我来说非常重要,我正在以一个简单的目标开启问题:任何人都可以在AJAX Air中成功打开一个全新的全屏幕NativeWindow,并从该窗口检测击键?
希望我只是忽略了一些非常简单的东西,但如果JS无法监听键盘事件,那么Flash小部件/助手可能会将键盘事件转发给JS。这是我唯一能想到的,但可能还有其他方法。我只是不知道。希望那里有人知道正确答案!
非常感谢@mwilcox的答案。我不知道我使用的方法(来自O'Reilly Cookbook)和createRootWindow()
之间有什么区别,但不管它是什么,它确实解决了我的问题。我最终使用的代码是:
var objWindowOptions = new air.NativeWindowInitOptions();
objWindowOptions.transparent = false;
objWindowOptions.systemChrome = air.NativeWindowSystemChrome.STANDARD;
objWindowOptions.type= air.NativeWindowType.NORMAL;
var linkScreenToMainWindow = function() {
wWindow.removeEventListener(air.Event.COMPLETE,linkScreenToMainWindow);
objScreen.setWindowReference(wWindow.stage.getChildAt(0).window);
// At this point your windows are connected and you can fire commands into
// the window using objScreen as a proxy. For example:
alert(objScreen.document.body.innerHTML);
objScreen.myfunction();
};
var fhFilePath = air.File.applicationDirectory.resolvePath('childwindow.html');
wWindow = air.HTMLLoader.createRootWindow(true, objWindowOptions, true);
wWindow.stage.displayState = window.runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE;
wWindow.addEventListener(air.Event.COMPLETE,linkScreenToMainWindow);
wWindow.load(new air.URLRequest(fhFilePath.url));
我已经在Adobe Air(JS)中创建了一个新窗口,我需要捕获任何按键(或者如果它更容易,则可以捕获keydowns)。我没有问题向主窗口添加事件监听器,但任何子窗口似乎都没有识别任何常见的钩子技术。
我认为,部分问题是addEventListener()
的第一个参数是事件的名称,并且所有记录的事件名称都无法引发任何事件。知道我该怎么做这个吗?
主窗口
// Keyboard handler and event listener subscription:
var watcher = function() {
alert("Working");
};
window.addEventListener("keypress",watcher,false); // WORKS!
// Create child window:
var wWindow = new air.NativeWindow(objWindowOptions);
wWindow.activate();
wWindow.stage.displayState = window.runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE;
wWindow.stage.scaleMode = "noScale";
wWindow.stage.addChild( htmlView );
htmlView.load( new air.URLRequest("newpage.html") );
子窗口:newpage.html
// Keyboard handler and event listener subscription
var handler = function() {
alert('success!');
};
var strEventName = KeyboardEvent.KEY_DOWN; // Fails -- is undefined
//var strEventName = KeyboardEvent.KEYDOWN; // Fails -- is undefined
//var strEventName = 'keydown'; // Fails
// var strEventName = 1024; // Fails
window.nativeWindow.stage.addEventListener(strEventName,handler,false); // Fails
nativeApplication.addEventListener(strEventName,handler,false); // Fails
window.addEventListener(strEventName,handler,false); // Fails
我可能弄错了,但我想我已经尝试了上述的每一种排列,但没有一种能够发挥作用。
答案 0 :(得分:1)
我认为你错过了一步。尝试:
var newWin = air.HTMLLoader.createRootWindow(...options);
var container = newWin.window.nativeWindow;
否则,您确定在该子窗口中加载了AIR吗?