如何在Air中的两个NativeWindows之间进行通信

时间:2010-06-30 12:21:31

标签: javascript air

如何从创建它的父窗口发送消息或操作NativeWindow实例的内容?

我已经阅读了几个在同一个应用程序中的NativeWindow实例之间进行通信的地方,你需要“维护一个LocalConnection或写一整堆JavaScript”。碰巧的是,我写了一整堆JavaScript没有问题,但似乎没有任何关于如何做的文档。有谁知道该怎么办?

感谢你们给我的任何帮助!

1 个答案:

答案 0 :(得分:1)

在这里回答我自己的问题。 “JavaScript的整体打击”可以用一条荒谬的方式总结出来:

var myWindow = air.NativeApplication.nativeApplication.openedWindows[intWindowCount].stage.getChildAt(0).window

myWindow.document.getElementById('status').innerHTML = "success";

这假设您正在使用NativeWindow并将HTML加载到HTMLLoader并且您只加载一个孩子。 intWindowCount表示已打开窗口的数量(包括内部检查器)。 0表示您使用stage.addChild()方法创建的子项数。我正在使用的代码完全在下面。可能需要做一些清理工作,但对于需要做同样事情的人来说,它应该是一个很好的起点:

    var htmlView = new air.HTMLLoader(); 
    htmlView.width = 300; 
    htmlView.height = 500; 

    var objWindowOptions = new air.NativeWindowInitOptions();
    objWindowOptions.transparent = false;
    objWindowOptions.systemChrome = air.NativeWindowSystemChrome.STANDARD;
    objWindowOptions.type= air.NativeWindowType.NORMAL;

    var wWindow = new air.NativeWindow(objWindowOptions);
    wWindow.x = objScreen.x;
    wWindow.y = objScreen.y;
    wWindow.width = objScreen.width;
    wWindow.height = objScreen.height;
    wWindow.activate();

    wWindow.stage.align = "TL"; 
    wWindow.stage.displayState = runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE;
    wWindow.stage.scaleMode = "noScale"; 
    wWindow.stage.addChild( htmlView ); 
    htmlView.load( new air.URLRequest("pageTwo.html") );


    setTimeout(function(){
        objScreen.setWindowReference(air.NativeApplication.nativeApplication.openedWindows[intWindowCount].stage.getChildAt(0).window);
        objScreen.setClock(cClock);
        cClock.screen = objScreen;
    },500);

最后的超时是一个可怕的,令人尴尬的黑客。我只是使用它,因为我还没有找到与addEventListener()一起使用的正确事件。